[Kubernetes]ExternalIP 동작 확인
5532 단어 kubectlkubernetes
소개
"ClusterIP의 동작 확인"에서는 ClusterIP가 클러스터 내에서만 통신하는 서비스라고 가정했습니다. 그러나 ClusterIP에는 ExteralIP를 구성할 수 있으며 이를 구성하여 클러스터 외부의 노드와 통신할 수 있습니다.
이번에는이 ExternalIP의 동작을 확인하고 싶습니다.
설정
ExternalIP는 매니페스트 유형으로 설정하지 않습니다. type은 ClusterIP입니다. 다소 어렵습니다.
작성한 매니페스트는 다음과 같습니다. ClusterIP 매니페스트에 'spec.externalIPs'를 추가합니다.
sampleExternalIP.yamlapiVersion: v1
kind: Service
metadata:
name: external-ip
spec:
type: ClusterIP
externalIPs:
- 10.20.30.20
ports:
- name: cluster-port
protocol: TCP
port: 8080
targetPort: 80
selector:
app: nginx-dep
설정할 IP 주소는 클러스터를 구성하는 노드의 IP 주소입니다. 모든 것을 지정할 필요는 없습니다. 여기서는 worker01만 지정합니다.
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready master 39d v1.17.3 10.20.30.10 <none> CentOS Linux 7 (Core) 3.10.0-1062.12.1.el7.x86_64 docker://19.3.6
k8s-worker01 Ready <none> 39d v1.17.3 10.20.30.20 <none> CentOS Linux 7 (Core) 3.10.0-1062.12.1.el7.x86_64 docker://19.3.6
k8s-worker02 Ready <none> 39d v1.17.3 10.20.30.30 <none> CentOS Linux 7 (Core) 3.10.0-1062.12.1.el7.x86_64 docker://19.3.6
ExternalIP 만들기
이 매니페스트를 적용하여 만든 서비스를 확인합니다.
$ kubectl apply -f sampleExternalIP.yaml
service/external-ip created
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cluster-ip ClusterIP 10.101.47.213 <none> 8080/TCP 31h
external-ip ClusterIP 10.98.225.181 10.20.30.20 8080/TCP 7s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 39d
$ kubectl describe svc external-ip
Name: external-ip
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"external-ip","namespace":"default"},"spec":{"externalIPs":["10.20...
Selector: app=nginx-dep
Type: ClusterIP
IP: 10.98.225.181
External IPs: 10.20.30.20
Port: cluster-port 8080/TCP
TargetPort: 80/TCP
Endpoints: 192.168.69.236:80,192.168.79.92:80
Session Affinity: None
Events: <none>
동작 확인
클러스터에는 이전 작성한 Pod(Deployment)가 있습니다. 이 Pod에 대해 외부로부터의 소통을 확인합니다.
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6c4975c9f5-v5ljf 1/1 Running 1 31h 192.168.69.236 k8s-worker02 <none> <none>
nginx-6c4975c9f5-x4bwq 1/1 Running 1 31h 192.168.79.92 k8s-worker01 <none> <none>
검증에 사용하는 클러스터는 PC의 VertualBOX로 구축됩니다. 클러스터를 구성하는 VM 외에도 Gateway가 되는 VM도 있으므로 여기에서 HTTP 요청을 보내 소통을 확인합니다.
검증 환경은 여기를 참조해 주세요.
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://10.20.30.20:8080 | grep pod; sleep 5; done
pod1
pod1
pod1
pod2
pod2
소통의 확인과 밸런싱되고 있는 것을 알 수 있군요.
또한 ExternalIP를 설정한 노드는 worker01(10.20.30.20)뿐이지만 worker02에 배포된 Pod1에도 밸런싱되어 있음을 알 수 있습니다.
ExternalIP로 설정하고 "없음"worker02 (10.20.30.30)에서 소통할 수 없다는 것을 확인합니다.
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://10.20.30.30:8080 | grep pod; sleep 5; done
[gateway ~]$
Error가 나오는 것은 아니기 때문에 이해하기 어렵습니다만, 아무것도 응답이 없고 프롬프트가 돌아옵니다.
요약
이번에는 ExternalIP의 동작을 확인했습니다. 이것만이라면 NodePort와 같아 보이지만 NodePort의 동작을 확인할 때 차이를 확인하고 싶습니다.
Reference
이 문제에 관하여([Kubernetes]ExternalIP 동작 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/8f3c320c4eb5cf25d9de
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ExternalIP는 매니페스트 유형으로 설정하지 않습니다. type은 ClusterIP입니다. 다소 어렵습니다.
작성한 매니페스트는 다음과 같습니다. ClusterIP 매니페스트에 'spec.externalIPs'를 추가합니다.
sampleExternalIP.yaml
apiVersion: v1
kind: Service
metadata:
name: external-ip
spec:
type: ClusterIP
externalIPs:
- 10.20.30.20
ports:
- name: cluster-port
protocol: TCP
port: 8080
targetPort: 80
selector:
app: nginx-dep
설정할 IP 주소는 클러스터를 구성하는 노드의 IP 주소입니다. 모든 것을 지정할 필요는 없습니다. 여기서는 worker01만 지정합니다.
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready master 39d v1.17.3 10.20.30.10 <none> CentOS Linux 7 (Core) 3.10.0-1062.12.1.el7.x86_64 docker://19.3.6
k8s-worker01 Ready <none> 39d v1.17.3 10.20.30.20 <none> CentOS Linux 7 (Core) 3.10.0-1062.12.1.el7.x86_64 docker://19.3.6
k8s-worker02 Ready <none> 39d v1.17.3 10.20.30.30 <none> CentOS Linux 7 (Core) 3.10.0-1062.12.1.el7.x86_64 docker://19.3.6
ExternalIP 만들기
이 매니페스트를 적용하여 만든 서비스를 확인합니다.
$ kubectl apply -f sampleExternalIP.yaml
service/external-ip created
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cluster-ip ClusterIP 10.101.47.213 <none> 8080/TCP 31h
external-ip ClusterIP 10.98.225.181 10.20.30.20 8080/TCP 7s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 39d
$ kubectl describe svc external-ip
Name: external-ip
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"external-ip","namespace":"default"},"spec":{"externalIPs":["10.20...
Selector: app=nginx-dep
Type: ClusterIP
IP: 10.98.225.181
External IPs: 10.20.30.20
Port: cluster-port 8080/TCP
TargetPort: 80/TCP
Endpoints: 192.168.69.236:80,192.168.79.92:80
Session Affinity: None
Events: <none>
동작 확인
클러스터에는 이전 작성한 Pod(Deployment)가 있습니다. 이 Pod에 대해 외부로부터의 소통을 확인합니다.
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6c4975c9f5-v5ljf 1/1 Running 1 31h 192.168.69.236 k8s-worker02 <none> <none>
nginx-6c4975c9f5-x4bwq 1/1 Running 1 31h 192.168.79.92 k8s-worker01 <none> <none>
검증에 사용하는 클러스터는 PC의 VertualBOX로 구축됩니다. 클러스터를 구성하는 VM 외에도 Gateway가 되는 VM도 있으므로 여기에서 HTTP 요청을 보내 소통을 확인합니다.
검증 환경은 여기를 참조해 주세요.
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://10.20.30.20:8080 | grep pod; sleep 5; done
pod1
pod1
pod1
pod2
pod2
소통의 확인과 밸런싱되고 있는 것을 알 수 있군요.
또한 ExternalIP를 설정한 노드는 worker01(10.20.30.20)뿐이지만 worker02에 배포된 Pod1에도 밸런싱되어 있음을 알 수 있습니다.
ExternalIP로 설정하고 "없음"worker02 (10.20.30.30)에서 소통할 수 없다는 것을 확인합니다.
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://10.20.30.30:8080 | grep pod; sleep 5; done
[gateway ~]$
Error가 나오는 것은 아니기 때문에 이해하기 어렵습니다만, 아무것도 응답이 없고 프롬프트가 돌아옵니다.
요약
이번에는 ExternalIP의 동작을 확인했습니다. 이것만이라면 NodePort와 같아 보이지만 NodePort의 동작을 확인할 때 차이를 확인하고 싶습니다.
Reference
이 문제에 관하여([Kubernetes]ExternalIP 동작 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/8f3c320c4eb5cf25d9de
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6c4975c9f5-v5ljf 1/1 Running 1 31h 192.168.69.236 k8s-worker02 <none> <none>
nginx-6c4975c9f5-x4bwq 1/1 Running 1 31h 192.168.79.92 k8s-worker01 <none> <none>
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://10.20.30.20:8080 | grep pod; sleep 5; done
pod1
pod1
pod1
pod2
pod2
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://10.20.30.30:8080 | grep pod; sleep 5; done
[gateway ~]$
이번에는 ExternalIP의 동작을 확인했습니다. 이것만이라면 NodePort와 같아 보이지만 NodePort의 동작을 확인할 때 차이를 확인하고 싶습니다.
Reference
이 문제에 관하여([Kubernetes]ExternalIP 동작 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dingtianhongjie/items/8f3c320c4eb5cf25d9de텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)