뭔가 너무 편하게 해놓으면 바보가 되는게 맞다.
라즈베리파이에 K8s를 셋팅하고나서, 점점 이것저것 서비스들이 추가되다보니 ingress로 통합하고 싶어졌다.
그래서 그냥 구글링으로 ingress를 설치했는데,
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/cloud/deploy.yaml
이렇게만 하면 걍 무지성으로 ingress가 설치된다.
됐구나 싶어 여기에 서비스 연결을 했는데,
어라?
라즈베리파이가 3개인데 이중에 1개로만 접근이 된다.
뭔말이고 하니,
라즈베리파이 2,3,4가 있는데,
ingress-controller를 설치했으니, 가령 ingress http 포트를 30080이라고 했다면,
라즈베리파이 2,3,4 어디로든 30080으로 접근하면 서비스가 되어야 한다.
그런데,
실제로 ingress-controller Pod가 떠있는 라즈베리파이 4로 지정해줘야만 서비스가 되는 것...
아 이거 뭔가 K8s 버그구나, kube-proxy가 맛이 갔구나 했는데,
.
.
.
결론은 내가 맛이 간거였다.
자동으로 설치된 ingress-nginx에 아래 설정 2가지를 바꿔줘야 한다.
#type: LoadBalancer
type: NodePort
#externalTrafficPolicy: Local
externalTrafficPolicy: Cluster
집에 라즈베리파이 3개 묶어놨는데 LB가 있을리가 없잖은가?
그리고,
서비스를 NodePort로 생성할때에 externalTrafficPolicy는 Cluster가 기본이지만,
ingress-nginx는 Local로 설정이 되어 있다.
Local로 했을 경우 실제 Pod가 떠있는 노드의 포트만 열려있게 된다.
ingress-nginx가 Local로 설정된 이유는 생각해보면 당연하다.
LoadBalancer type 으로 생성하면 LoadBalancer가 모든 노드의 해당 포트를 감시므로
Pod가 실제로 떠있는 노드로만 트래픽을 보낼 수 있다.
그러면 NodePort의 고민거리인 불필요한 홉을 줄일 수 있고,
또 SNAT가 되지 않으니 nginx에서도 Client IP를 식별할 수 있게 된다.
여러가지 장점이 있으니 Local로 지정한거다.
이걸 무지성으로 그냥 쓰려고 했고, 또 왜 이런지 전혀 감을 잡을 수 없었다니,
역시 사람은 너무 편하면 바보가 된다.
'Raspberry pi' 카테고리의 다른 글
쿠버네티스 클러스터에 라즈베리파이3 워커노드 추가 (0) | 2022.12.27 |
---|---|
라즈베리파이 쿠버네티스에 Prometheus + Grafana 올리기 (0) | 2022.08.25 |
라즈베리파이 2대 쿠버네티스 클러스터링 구성 완료 (0) | 2022.08.17 |
라즈베리파이2 쿠버네티스 워커노드 만들기 (0) | 2022.08.15 |
퍼시스턴스 볼륨을 사용하면 기존 파일이 사라지는 문제 해결 (0) | 2022.08.11 |