kubernetes

kubernetes nginx-ingress-controller 504 bad gateway 해결

PSAwesome 2022. 12. 23. 22:54
반응형

여러 증상이 있었습니다.

 

  1. ufw 킨 상태로 calico가 정상 동작하지 않았고, (ufw 끄고 calico 실행 -> ufw on 하면 동작 됨)
  2. ingres-nginx-controller는 정상 동작중
    1. controller log를 찍어보면 upstream timed out (110: Operation timed out) 발생
  3. calico는 모두 run 상태
  4. 특정 노드에서 504 bad gateway가 발생
    1. 띄워놓은 서비스는 대략 6개 가량 있었고, 그 중 spark만 정상이었습니다.

 

 

 

마지막 추가했던 서비스를 하나씩 끄면서 오류 찾기..(헛짓ㅠ)

kuvectl get po -A

현 상태에서도 504 bad gateway가 발생

 

문득 예전에 calico 말썽이 떠올라서

calico 로그를 확인해보니, 아래와 같은 warning이 있었습니다.

Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused

 

calico가 `Running` 상태로 표시되긴 하지만 내부에선 라우팅이 이루어지지 않고 있었습니다.

calico의 역할

kubernetes cluster 내에 존재하는 각각의 pod이 통신할 수 있도록 출발지와 도착지를 라우팅하는 역할을 수행합니다.

 

출발지 10.96.0.10 이면, 

옵션 프로토콜에 의해서 출발지 헤더에 내부 터널 IP 주소를 포함하여 outer IP 헤더를 추가합니다.

이때 구성된 네트워크에 목적지 pod이 들어있는 노드를 찾기 위해 BGP 프로토콜이 사용됩니다.

 

BGP 피어링을 위해 179번 포트가 활용되기 때문에

방화벽 정책을 허용해야 합니다

 

ufw 정책 추가

# vim /etc/ufw/applications.d/kubernetes-profiles
# body

[k8s-master]
title=master
description=required master port api, etc client api, kubelet api, kube-scheduler, kube-controller-manager calico
ports=53,179,443,6443,8080,5978,6783,6379,9153,10250,10251,10252,10259,10257/tcp|2379:2380/tcp|6783,6784/udp
sudo ufw enable
sudo ufw allow from 192.168.0.0/24 to any app k8s-master && sudo ufw reload

 

 

BRID

This is a fork of the BIRD internet routing daemon which provides the following additional function used by Calico:

인터넷 라우팅 데몬 포크이고, IP-in-IP를 사용한 라우팅 지원합니다.

IP - in - IP 프로토콜은 calico 라우팅 옵션의 기본 값입니다.

 

BGP (border gateway protocol)

서로 다른 조직의 네트워크를 연결할 때 사용하는 라우팅 프로토콜

학교나 정부 기관 등에서 2개 이상의 ISP와 연결할 때 사용하거나,

ISP끼리 네트워크를 연결할 때도 사용합니다.

 

신뢰성 있는 통신인 TCP 179번을 사용하여 유니캐스트 방식으로 라우팅 정보를 전송합니다.

조직간에 계약된 Policy에 따라 최적 경로를 결정하며

수많은 (하나의 BGP 번호인 - AS(Autonomous System 번호) )  AS로 구성되어 있고, 그중 하나인 해당 조직의 AS에서 라우팅 정책을 설정하여 원하는 라우팅이 이루어지게 해야합니다.

 

 

결정적인 도움을 받은 주소

- [산티고아의 블로그 not ready]

 

참고

- https://projectcalico.docs.tigera.io/getting-started/kubernetes/requirements

- https://net-study.club/entry/Routing-Protocol-BGP-Border-Gateway-Protocol

반응형