Istio, Pod CrashLoopBackOff 해결하기

Istio 를 설치하고 Pod 를 생성했는데, 다음과 같이 오류가 발생했다.

]$ kubectl describe pod/employee-producer-866cfb8cf8-s2qk4
Init Containers:
  istio-init:
    Container ID:  containerd://eb85c7971088c72e64b432a38f419a392182a44735281993c0c2b44460acd8fc
    Image:         docker.io/istio/proxyv2:1.13.1
    Image ID:      docker.io/istio/proxyv2@sha256:099ee79c150829471270a14520506b83117bb7448cc80ba215617785237c1eb0
    Port:          
    Host Port:     
    Args:
      istio-iptables
....
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    255
      Started:      Mon, 28 Feb 2022 13:07:52 +0900
      Finished:     Mon, 28 Feb 2022 13:07:52 +0900
...

istio-init 컨테이너가 오류가 발생한 것을 알 수 있다. Pod 안에 컨테이너가 여러개일 경우에 컨테이너 로그를 봐야하는데 다음과 같이 Pod 에 속한 컨테이너 로그를 볼수 있다.

]$ kubectl logs employee-producer-866cfb8cf8-spnqs -c istio-init
COMMIT
2022-02-28T04:16:59.895565Z     info    Running command: iptables-restore --noflush /tmp/iptables-rules-1646021819895421411.txt3256082129
2022-02-28T04:16:59.896995Z     error   Command error output: xtables parameter problem: iptables-restore: unable to initialize table 'nat'

Error occurred at line: 1
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
2022-02-28T04:16:59.897030Z     error   Failed to execute: iptables-restore --noflush /tmp/iptables-rules-1646021819895421411.txt3256082129, exit status 2

이 문제는 istio cni 컴포넌트를 함께 설치해주면 된다. 보통 Istio 를 설치할때에 Profile 만 지정하는데, demo 프로파일에 경우에 CNI 를 설치하지 않는다. 다음과 같이 재설치를 해준다.

]$ istioctl x uninstall --purge # 삭제
]$ istioctl install --set profile=demo --set components.cni.enabled=true -y

이렇게 CNI 를 활성화해서 재설치를 하면 문제없이 작동 된다.

문제점

여기서 한가지 문제가 있다. CNI 는 보통 Flannel, Calico 등을 이용하는데, 이것과 별도로 Istio-cni 를 설치하게 되는 것이다. 이왕이면 기존에 있는 것을 활용하는 방안을 고려해야 한다.

Calico 의 경우에 이에 대해서 기술하고 있는 문서가 있으니 참고해서 한번 해볼만 하다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다