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
在集群中访问
在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