k8s 集群中的 port

本文介绍 k8s 集群外访问集群内部服务不同方式下的 port。

hostPort

出现在 Deployment、Pod 等资源对象描述文件中的容器部分,类似于 docker run -p <containerPort>:<hostPort>。containerPort 为容器暴露的端口;hostPort 为容器暴露的端口直接映射到的主机端口。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: apps/v1
kind: Deployment
...
spec:
...
template:
...
spec:
nodeName: node1
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80 # containerPort是pod内部容器的端口
hostPort: 30080

集群外访问方式:node1的IP:30080

nodePort

出现在 Service 描述文件中,Service 为 NodePort 类型时。port 为在k8s集群内服务访问端口;targetPort 为关联 pod 对外开放端口,与上述 containerPort 保持一致;nodePort 为集群外访问端口,端口范围为 30000-32767。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: Service
metadata:
name: nginx-pod-service
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 8080 # port是k8s集群内部访问Service的端口
targetPort: 80 # targetPort是pod的端口,从port和nodePort来的流量经过kube-proxy流入到pod的targetPort上
nodePort: 30080
selector:
app: nginx

集群外访问方式:节点IP:30080

Author

王亮

Posted on

2022-05-20

Licensed under