Service中port、nodeport、targetport区别

1,331 阅读1分钟

targetPort、port、nodeport三者中targetport是指pod的端口、port是指service的端口,是给集群内部访问所用(只能集群内部访问),nodeport也是service的端口,但是nodeport是给集群外部访问所用(内部也可访问)。

#案例

apiVersion: v1
kind: Service
metadata:
  name: web-svc
  namespace: app
spec:
  type: NodePort
  selector:
    app: web-svc
  ports:
  - protocol: TCP
    port: 18080
    nodePort: 30002
    targetPort: 80

如上构建了一个名为web-svc的service,其中pod的端口为80(targetport)

集群内部可以通过Clusterip+port来访问

[root@master20 ~]# kubectl get svc -n app
NAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)           AGE
web-svc   NodePort   10.105.21.36   <none>        18080:30002/TCP   11h

在集群中访问

image.png

在yaml文件中,字段Service.spec.type字段定义了service暴露类型,设置为NodePort可以让集群外部访问到Service,设置为ClusterIP则只能集群内部访问

[root@bogon k8s_exercise_wh]# kubectl get pods -o wide -n app
NAME                       READY   STATUS    RESTARTS   AGE   IP              NODE       NOMINATED NODE   READINESS GATES
web-svc-5f49b7c4f4-6jvgt   1/1     Running   0          11h   10.244.49.169   worker22   <none>           <none>
web-svc-5f49b7c4f4-x52mw   1/1     Running   0          11h   10.244.90.251   worker21   <none>           <none>
web-svc-5f49b7c4f4-xlz8g   1/1     Running   0          11h   10.244.148.55   master20   <none>           <none>

在外部机器访问node+nodeport来访问service

[root@bogon k8s_exercise_wh]# ip add | grep 192.168
    inet 192.168.1.15/24 brd 192.168.1.255 scope global noprefixroute em1

如上本机ip为192.168.1.15 nodeip为192.168.102.21、22、23三台 访问service

image.png