리플리카셋을 2로 설정했지만 어째서인지 계속 동일한 파드로만 진입이 되는것같습니다. 서비스의 로드벨런싱 기능이 존재하는지 아니면 없는건지는 이후 학습하면서 보면 될것같습니다.
인그레스
클러스터 외부로 서비스를 공개하려면 서비스를 NodePort 로 노출시킵니다. 그러나 이 방법은 L4 레벨까지만 다룰 수 있어서 HTTP/HTTPS 처럼 경로를 기반으로 전환하는 L7 레벨의 제어는 불가능합니다.
이를 해결하가 위한 리소스가 인그레스 입니다.
튜토리얼에서는 nginx ingress controller 를 사용하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# 메니패스트의 내용중 Deployment 의 apiVersion 이 extensions/v1beta1 을 지원하지 않는다면 # 해당 파일을 내려받아 yaml 로 만든 후 # extensions/v1beta1 -> apps/v1 으로 변경하여 적용합니다. https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.16.2/deploy/mandatory.yaml
# 적용 확인 $ kubectl -n ingress-nginx get service,pod NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/default-http-backend ClusterIP 10.102.121.230 <none> 80/TCP 5m15s service/ingress-nginx LoadBalancer 10.110.155.253 localhost 80:30942/TCP,443:31597/TCP 4s
NAME READY STATUS RESTARTS AGE pod/default-http-backend-75b5c88cd6-pvhdk 1/1 Running 0 5m15s pod/nginx-ingress-controller-86d68989c8-772pv 1/1 Running 0 5m15s
$ kubectl apply -f simple-echo-ingress.yaml ingress.extensions/simple-echo created
kubectl get ingress NAME HOSTS ADDRESS PORTS AGE simple-echo wook.ingress.local localhost 80 19m
이제 지정한 호스트로 /etc/hosts 파일을 127.0.0.1 아이피와 매핑후 통신을하면
1 2 3 4 5 6 7
$ curl http://wook.ingress.local/ # 또는 $ curl http://localhost -H 'Host: wook.ingress.local' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 33 100 33 0 0 3000 0 --:--:-- --:--:-- --:--:-- 3300 [simple-echo-summer-lszln] Hello~
와 같이 응답하는것을 볼 수 있습니다. 로드벨런스까지 적용되어 새로고침시 다른 호스트의 응답을 볼수 있습니다.