Not using Services - Ingress
Not using Services
지금까지 Nginx Ingress Controller는 Service(Cluster IP)를 거쳐 Pod IP로 전달되는 것으로 알고 있었는데 잘못 알고 있었음을 발견하고 테스트를 해보기로 했습니다.
Nginx Ingress Controller
Nginx Ingress Controller는 크게 kubernetes, Nginx 에서 제공하는 Ingress로 나뉩니다. 기능별 차이가 있으며 Nginx에서 제공하는 Ingress는 Plus 와도 기능 차이를 가지고 있습니다. 테스트는 kubernetes Ingress Controller로 진행하기로 합니다.
Nginx Ingress Traffic Monitoring
iptraf를 통해서 요청이 어떻게 들어오는 지 확인해보기로 했습니다. nginx 이미지를 배포하였고 Pod ip는 192.168.125.70, ClusterIP는 10.100.95.61 입니다. 그리고 Nginx Ingress Controller Pod ip는 192.168.125.68 입니다.
Nginx Ingress & Node Port 비교
10.10.180.11 은 ClientIP 이고 port 30303은 node port입니다.
port 31806은 nginx ingress controller port 입니다.
예상했던 것과 다르게 Ingress/NodePort 모두 Pod IP를 바로 찾아가고 있습니다. 다만 Ingress는 Nginx Ingress Controller Pod 에 먼저 요청하고 있습니다.
Tunnel Interface
Calico cni를 사용하는 구성에서 Pod가 배치된 Node가 다른 NodeIP로 요청을 보낸경우 어떻게 트래픽이 전달되는지 확인해보았습니다.
NodePort
worker1
192.168.149.2 는 tunnel interface 입니다. Client IP -> Node IP -> tunnel -> pod
worker2
tunnel -> Pod
Ingress Controller
worker1
192.168.149.2 는 tunnel interface 입니다. Client IP -> Node IP -> tunnel -> Ingress pod
worker2
tunnel -> Ingress pod -> Pod
결론
ingress/nodeport 상관없이 clusterip 바라보지 않고 바로 트래픽을 전송하고 있었습니다.
참조
- https://www.joyfulbikeshedding.com/blog/2018-03-26-studying-the-kubernetes-ingress-system.html