레이블이 daemonset인 게시물을 표시합니다. 모든 게시물 표시
레이블이 daemonset인 게시물을 표시합니다. 모든 게시물 표시

ingress 리소스 status 업데이트 문제

ingress-nginx controller 는 daemonset 으로 관리 되고 ingress 노드 마다 ingress-nginx controller pod 가 올라가 있다.
여기에 ingress 노드를 새로 추가(10.10.10.11)했다.
k8s dashboard 를 통해서도 추가된 ingress 노드가 보이고 신규 ingress 로 유입도 된다.

ingress-nginx controller 는 다음 옵션을 사용해 ingress 리소스의 status 로 사용중인 ingress ip 를 파악하도록 되어 있다.
containers:
- args:
  - --report-node-internal-ip-address

그런데 기존 ingress 리소스나 새 ingress 리소스를 생성하면,
status.loadBalancer.ingress.ip(kubectl get ingress 실행시 address 부분) 가 기존 것만 보인다.
status:
  loadBalancer:
    ingress:
    - ip: 10.10.10.10


신규 ingress node 만 ingress-nginx controller pod 가 새로 생성됐고 기존 pod 들은 AGE 를 보면 꽤 오래되어 있다.
ingress-nginx controller pod 를 재시작 해보자.
daemonset 템플릿 업데이트 후 재시작은 다음 2개 방식이 있으니 설정에 맞게 재시작 한다.
# 수동으로 pod 를 삭제하면 업데이트된 템플릿 값으로 새 pod 를 생성된다.
updateStrategy:
  type: OnDelete

# 디폴트 전략, 자동으로 기존 pod 가 종료되고, 새 pod 가 생성된다.
updateStrategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 1  # 업데이트 중 pod 1개만 사용하지 못하게 한다(pod 1개씩 종료,재시작)

OnDelete 수동으로 pod 를 삭제하기 때문에, pod fail 이벤트가 발생하니 RollingUpdate 로 seamless 하게 동작하는게 더 좋아 보인다.
ingress-nginx controller 가 업데이트되니, ingress 리소스의 status 에 자동으로 신규 ingress ip 가 추가되어 보인다.
이제 ingress 노드 추가 삭제시에도 ingress-nginx controller 재시작하지 않아도 ingress ip 상태가 자동 업데이트 된다.


#####


혹시 재시작해도 변경이 없다면 비슷한 다음 이슈들을 확인해봐도 좋을것 같다.

ingress-nginx controller daemonset 에서 다음 옵션을 추가해 재시작
containers:
- args:
  - --update-status=true
  - --publish-service=nginx-namespace/인그레스노드_VIP_서비스

ingress-nginx controller 이미지를 0.28 이후 버전을 사용