인프라

[k8s] Ingress 컨트롤러 구성 - 트러블슈팅

copcat 2022. 3. 11. 21:55

Ingress 컨트롤러 를 Ingress-Nginx로 구성해보는 실습 중에 발생한 이슈에 대해 원인과 해결을 공유하고자 합니다.

 

 

사건 발단

강의에서는 Ingress-Nginx 버전 v0.47.0 으로 진행하여 인그레스 컨트롤러를 구성했습니다.

하지만 저의 k8s 에서는 "ingress-nginx-admission-patch" Pod가 자꾸  crashloopbackoff 상태가 되어 버리는 것입니다.

해당 pod 상세 정보 - Event

(강의에서와 똑같이 따라해줬을 뿐인데 왜 저만 안될까요?)

 

문제해결시도

  • Ingress-nginx를 삭제하고 재설치해보는 작업

Ingress-Nginx 는 https://github.com/kubernetes/ingress-nginx#support-versions-table 여기서 다운 받을 수 있습니다.

 

GitHub - kubernetes/ingress-nginx: NGINX Ingress Controller for Kubernetes

NGINX Ingress Controller for Kubernetes. Contribute to kubernetes/ingress-nginx development by creating an account on GitHub.

github.com

 

  • crashloopbackoff 상태인 노드에 접속하여 도커 이미지를 다시 받아보는 작업

해결이 되지않아 결국 k8s 환경인 vm를 전부 초기화해보고 다시 설치해봤지만 역시 해결되지 않았습니다..

 

무엇이 문제일까요?

강의가 진행되었던 Ingress-nginx버전은 v0.47.0 버전이였습니다.

아래의 그림에서 확인해보시면 강의에서 진행하는 v0.47.0 의 k8s지원버전은 1.21, 1.20, 1.90 입니다.

 

https://github.com/kubernetes/ingress-nginx#support-versions-table

어? 하고  바로 k8s 버전을 확인해보니 아니나 다를까 1.23.4 버전이였습니다.

 

k8s 1.23 버전을 지원하는 Ingress - nginx 버전 중 바로 1.1.2 로 변경하였습니다.

 

바로 성공하는 모습입니다.

 

하지만 기쁨도 잠시 바로 다음 고비가 찾아왔습니다.

 

(Ingress Controller Ingress 규칙을 관리하기 위한 서버일 뿐이고, 실제 Ingress 규칙을 생성 해주셔야 합니다)

 

바로 그 고비는 Ingress 규칙을 생성하는 과정에서 다음과 같은 이슈가 발생하였습니다.

오류그만.

 

오류를 보면 serviceName, servicePort 필드를 해석할 수 없고 pathType 필드가 없다는 둥 다양한 오류를 내뿜고 있었습니다. 공식문서를 확인해보니 apiversion이 변경되면서 yaml 작성 포맷 또한 제가 작성한 yaml 과는 차이가 있는 것을 확인했습니다.

 

기존의 작성한 yaml 파일

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foos1
        backend:
          serviceName: s1
          servicePort: 80
      - path: /bars2
        backend:
          serviceName: s2
          servicePort: 80
  - host: bar.foo.com
    http:
      paths:
      - backend:
          serviceName: s2
          servicePort: 80

공식문서의  yaml작성 포맷

제가 작성한 yaml 파일과 공식문서에서 작성한 yaml 과는 pathType 이 추가되었고  backend 부분 정의 방법이 변경되었다는 것을 확인할 수 있었습니다.

 

ingress yaml 파일 수정

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foos1
        pathType: Prefix
        backend:
          service:
            name: s1
            port:
              number: 80

      - path: /bars2
        pathType: Prefix
        backend:
          service:
            name: s2
            port:
              number: 80
  - host: bar.foo.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: s2
            port:
              number: 80

모두 잘되는 것을 확인할 수 있었습니다.

 

반응형