[Kubernetes] NodePort 서비스의 동작 확인
6113 단어 kubectlkubernetes
소개
이번에는 Service의 하나인 NodePort의 동작을 확인하고 싶습니다.
지난번 은 ExternalIP 동작을 확인했습니다. 동작적으로 NodePort와 ExternalIP는 매우 비슷하기 때문에 차이를 중심으로 확인하고 싶습니다.
NodePort 설정 및 개요
다음 매니페스트를 만들었습니다.
sampleNodePort.yamlapiVersion: v1
kind: Service
metadata:
name: node-port
spec:
type: NodePort
ports:
- name: node-port
protocol: TCP
port: 8080
targetPort: 80
nodePort: 30001
selector:
app: nginx-dep
NodePort는 모든 작업자 노드를 입구로 외부와 통신합니다. 따라서 ExternalIP는 외부와 통신하는 노드의 IP 주소를 매니페스트에 설명했지만 NodePort에는 해당 항목이 없습니다.
대신 통신을 수락할 포트(nodePort)를 지정합니다. 매니페스트에서 지정하지 않으면 기본 "30000-32767"범위에서 자동으로 할당됩니다. 매니페스트로 설정하는 경우에도 이 범위에서 지정합니다.
"port""targetPort"는 ClusterIP와 유사합니다. NodePort는 내부에 ClusterIP를 포함하는 이미지입니다.
NodePort 만들기
이 매니페스트를 apply합니다.
$ kubectl apply -f sampleNodePort.yaml
service/node-port created
$ kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
cluster-ip ClusterIP 10.101.47.213 <none> 8080/TCP 3d6h app=nginx-dep
external-ip ClusterIP 10.98.225.181 10.20.30.20 8080/TCP 47h app=nginx-dep
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 41d <none>
node-port NodePort 10.101.179.255 <none> 8080:30001/TCP 13s app=nginx-dep
$ kubectl describe svc node-port
Name: node-port
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"node-port","namespace":"default"},"spec":{"ports":[{"name":"node-...
Selector: app=nginx-dep
Type: NodePort
IP: 10.101.179.255
Port: node-port 8080/TCP
TargetPort: 80/TCP
NodePort: node-port 30001/TCP
Endpoints: 192.168.69.246:80,192.168.79.106:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
동작 확인
외부와의 소통
외부(gateway)에서 소통할 수 있는지 확인합니다.
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://k8s-worker01:30001 | grep pod; sleep 5;done
pod1
pod1
pod1
pod2
pod2
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://k8s-worker02:30001 | grep pod; sleep 5;done
pod1
pod1
pod2
pod1
pod2
2개의 worker 노드(worker01/worker02)의 어느 쪽에서도 소통할 수 있는 것과 밸런싱되고 있는 것을 확인할 수 있네요.
내부 소통
NodePort의 ClusterIP로서의 동작도 확인해 보겠습니다.
테스트용 포드로 다음을 사용합니다.
test_pod.yamlapiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: centos
image: centos:latest
command:
- sh
- -c
args:
- for i in 1 2 3 4 5 ; do curl -s http://node-port.default.svc.cluster.local:8080 ; sleep 5; done ;exit 0
FQDN에서 지정했지만 ClusterIP와 동일한 규칙입니다. 또한 포트 번호는 "nodePort"가 아니라 "port"를 지정합니다.
[Kubernetes] 클러스터 내 DNS의 동작 확인
이 매니페스트를 적용하고 30초 정도 기다려 로그를 확인합니다.
$ kubectl apply -f test_pod.yaml
pod/test-pod created
$ kubectl logs test-pod | grep pod
pod2
pod1
pod2
pod2
pod1
ClusterIP로서도 제대로 동작하고 있네요.
요약
이번에는 NodePort의 동작을 확인했습니다.
ExternalIP와의 차이는 외부와의 통신의 입구가 되는 노드가 매니페스트로 지정한 노드만(ExternalIP)인가, 전체 노드(NodePort)인가의 차이일까요?
동작적으로는 닮아 있습니다만, ExternalIP는 ClusterIP 그 자체를 외부와 통신할 수 있도록 한 것으로, NodePort는 ClusterIP에 1개 레이어를 씌운 느낌이군요. 그 효과 정도까지는 모르기 때문에, 2개의 차이를 의식하면서 앞으로도 검증하고 싶습니다.
Reference
이 문제에 관하여([Kubernetes] NodePort 서비스의 동작 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/d3dda4583ae013c9d6eb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
다음 매니페스트를 만들었습니다.
sampleNodePort.yaml
apiVersion: v1
kind: Service
metadata:
name: node-port
spec:
type: NodePort
ports:
- name: node-port
protocol: TCP
port: 8080
targetPort: 80
nodePort: 30001
selector:
app: nginx-dep
NodePort는 모든 작업자 노드를 입구로 외부와 통신합니다. 따라서 ExternalIP는 외부와 통신하는 노드의 IP 주소를 매니페스트에 설명했지만 NodePort에는 해당 항목이 없습니다.
대신 통신을 수락할 포트(nodePort)를 지정합니다. 매니페스트에서 지정하지 않으면 기본 "30000-32767"범위에서 자동으로 할당됩니다. 매니페스트로 설정하는 경우에도 이 범위에서 지정합니다.
"port""targetPort"는 ClusterIP와 유사합니다. NodePort는 내부에 ClusterIP를 포함하는 이미지입니다.
NodePort 만들기
이 매니페스트를 apply합니다.
$ kubectl apply -f sampleNodePort.yaml
service/node-port created
$ kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
cluster-ip ClusterIP 10.101.47.213 <none> 8080/TCP 3d6h app=nginx-dep
external-ip ClusterIP 10.98.225.181 10.20.30.20 8080/TCP 47h app=nginx-dep
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 41d <none>
node-port NodePort 10.101.179.255 <none> 8080:30001/TCP 13s app=nginx-dep
$ kubectl describe svc node-port
Name: node-port
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"node-port","namespace":"default"},"spec":{"ports":[{"name":"node-...
Selector: app=nginx-dep
Type: NodePort
IP: 10.101.179.255
Port: node-port 8080/TCP
TargetPort: 80/TCP
NodePort: node-port 30001/TCP
Endpoints: 192.168.69.246:80,192.168.79.106:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
동작 확인
외부와의 소통
외부(gateway)에서 소통할 수 있는지 확인합니다.
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://k8s-worker01:30001 | grep pod; sleep 5;done
pod1
pod1
pod1
pod2
pod2
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://k8s-worker02:30001 | grep pod; sleep 5;done
pod1
pod1
pod2
pod1
pod2
2개의 worker 노드(worker01/worker02)의 어느 쪽에서도 소통할 수 있는 것과 밸런싱되고 있는 것을 확인할 수 있네요.
내부 소통
NodePort의 ClusterIP로서의 동작도 확인해 보겠습니다.
테스트용 포드로 다음을 사용합니다.
test_pod.yamlapiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: centos
image: centos:latest
command:
- sh
- -c
args:
- for i in 1 2 3 4 5 ; do curl -s http://node-port.default.svc.cluster.local:8080 ; sleep 5; done ;exit 0
FQDN에서 지정했지만 ClusterIP와 동일한 규칙입니다. 또한 포트 번호는 "nodePort"가 아니라 "port"를 지정합니다.
[Kubernetes] 클러스터 내 DNS의 동작 확인
이 매니페스트를 적용하고 30초 정도 기다려 로그를 확인합니다.
$ kubectl apply -f test_pod.yaml
pod/test-pod created
$ kubectl logs test-pod | grep pod
pod2
pod1
pod2
pod2
pod1
ClusterIP로서도 제대로 동작하고 있네요.
요약
이번에는 NodePort의 동작을 확인했습니다.
ExternalIP와의 차이는 외부와의 통신의 입구가 되는 노드가 매니페스트로 지정한 노드만(ExternalIP)인가, 전체 노드(NodePort)인가의 차이일까요?
동작적으로는 닮아 있습니다만, ExternalIP는 ClusterIP 그 자체를 외부와 통신할 수 있도록 한 것으로, NodePort는 ClusterIP에 1개 레이어를 씌운 느낌이군요. 그 효과 정도까지는 모르기 때문에, 2개의 차이를 의식하면서 앞으로도 검증하고 싶습니다.
Reference
이 문제에 관하여([Kubernetes] NodePort 서비스의 동작 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/d3dda4583ae013c9d6eb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ kubectl apply -f sampleNodePort.yaml
service/node-port created
$ kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
cluster-ip ClusterIP 10.101.47.213 <none> 8080/TCP 3d6h app=nginx-dep
external-ip ClusterIP 10.98.225.181 10.20.30.20 8080/TCP 47h app=nginx-dep
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 41d <none>
node-port NodePort 10.101.179.255 <none> 8080:30001/TCP 13s app=nginx-dep
$ kubectl describe svc node-port
Name: node-port
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"node-port","namespace":"default"},"spec":{"ports":[{"name":"node-...
Selector: app=nginx-dep
Type: NodePort
IP: 10.101.179.255
Port: node-port 8080/TCP
TargetPort: 80/TCP
NodePort: node-port 30001/TCP
Endpoints: 192.168.69.246:80,192.168.79.106:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
외부와의 소통
외부(gateway)에서 소통할 수 있는지 확인합니다.
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://k8s-worker01:30001 | grep pod; sleep 5;done
pod1
pod1
pod1
pod2
pod2
[gateway ~]$ for i in 1 2 3 4 5 ;do curl -s http://k8s-worker02:30001 | grep pod; sleep 5;done
pod1
pod1
pod2
pod1
pod2
2개의 worker 노드(worker01/worker02)의 어느 쪽에서도 소통할 수 있는 것과 밸런싱되고 있는 것을 확인할 수 있네요.
내부 소통
NodePort의 ClusterIP로서의 동작도 확인해 보겠습니다.
테스트용 포드로 다음을 사용합니다.
test_pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: centos
image: centos:latest
command:
- sh
- -c
args:
- for i in 1 2 3 4 5 ; do curl -s http://node-port.default.svc.cluster.local:8080 ; sleep 5; done ;exit 0
FQDN에서 지정했지만 ClusterIP와 동일한 규칙입니다. 또한 포트 번호는 "nodePort"가 아니라 "port"를 지정합니다.
[Kubernetes] 클러스터 내 DNS의 동작 확인
이 매니페스트를 적용하고 30초 정도 기다려 로그를 확인합니다.
$ kubectl apply -f test_pod.yaml
pod/test-pod created
$ kubectl logs test-pod | grep pod
pod2
pod1
pod2
pod2
pod1
ClusterIP로서도 제대로 동작하고 있네요.
요약
이번에는 NodePort의 동작을 확인했습니다.
ExternalIP와의 차이는 외부와의 통신의 입구가 되는 노드가 매니페스트로 지정한 노드만(ExternalIP)인가, 전체 노드(NodePort)인가의 차이일까요?
동작적으로는 닮아 있습니다만, ExternalIP는 ClusterIP 그 자체를 외부와 통신할 수 있도록 한 것으로, NodePort는 ClusterIP에 1개 레이어를 씌운 느낌이군요. 그 효과 정도까지는 모르기 때문에, 2개의 차이를 의식하면서 앞으로도 검증하고 싶습니다.
Reference
이 문제에 관하여([Kubernetes] NodePort 서비스의 동작 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dingtianhongjie/items/d3dda4583ae013c9d6eb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Kubernetes] NodePort 서비스의 동작 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dingtianhongjie/items/d3dda4583ae013c9d6eb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)