Replace NodePort with ClsuterIP - Thx to Traefik
Page content
Traefik을 이용한 Ingress/Ingress Controller를 이용해서 nginx 기반 Pod를 cluster 외부에서 접속할 수 있도록 설정했는데 곰곰히 생각해 보니 그렇다면 nginx service에 굳이 NodePort
를 사용해야 하나 라는 생각이 들었다. 이제 외부로부터의 요청은 든든한 Traefik이 처리해 줄 테니 직접 각 pod가 서비스를 NodePort를 이용해서 외부에 오픈할 필요가 없어 보였다.
이를 위해 기존에 사용하던 nginx의 value 파일을 다음과 같이 수정했다. NodePort를 위해 필요했던 정보들이 사라지고, 수신하고 싶은 Port만 지정하면 되니설정 파일이 무척 깔끔해졌다.
service:
# type: NodePort
# targetPort: 80 # container app. itself
# port: 8099 # pod
# nodePort: 8099 # cluster-wise
# externalTrafficPolicy: Local
# externalIPs: [192.168.0.100]
type: ClusterIP
port: 80
변경된 value 파일을 이용해서 다시 deploy.
$ kubectl get pod -o wide |grep podcast
podcast-nginx-659bcb6485-dxqm5 1/1 Running 0 2m29s 10.244.51.105 mini1 <none> <none>
Service 정보에서 EXTERNAL-IP
항목이 이제 none
으로 나오고, TYPE
도 Cluster IP
로 변경되었다.
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
...
podcast-nginx ClusterIP 10.96.100.155 <none> 80/TCP 2m20s
...
다만 IngressRoute 규칙은 다시 설정했어야 하는데, ingress rule의 port정보를 기존에 8099에서 80으로 변경한 후에 helm을 이용해서 backend service/deployment를 설치했는데도 제대로 동작하지 않아서 다시 IngressRoute를 적용했더니 그제서야 정상 동작 했다는.
아무튼 이제 Traefik으로 처리하는 서비스는 더 이상 외부에서 port를 이용해서 서비스되지 않도록 했다. 이제 공유기에 설정했던 port forwarding 내용도 하나 줄일 수 있겠네.