以下是整理后的关于 Kubernetes 中网络相关配置的说明,包括 hostNetwork
、hostPort
、port-forward
和 NodePort
的使用方法和示例。
0.1 hostNetwork
配置文件示例 (04-hostNetwork-xiuxian-v3.yaml
)
apiVersion: v1
kind: Pod
metadata:
name: hostnetwork-xiuxian
spec:
nodeName: worker232
hostNetwork: true # 使用宿主机网络名称空间
containers:
- name: c1
image: registry.cn-hangzhou.aliyuncs.com/cmy-k8s/apps:v3
说明
hostNetwork: true
:- Pod 使用宿主机的网络名称空间。
- Pod 内的容器可以直接访问宿主机的网络接口,共享宿主机的 IP 地址。
- 适用于需要直接访问宿主机网络的场景,例如运行网络监控工具或需要高性能网络的应用。
0.2 hostPort
配置文件示例 (05-ports-xiuxian-v2.yaml
)
apiVersion: v1
kind: Pod
metadata:
name: ports-xiuxian
spec:
nodeName: worker232
containers:
- name: c1
image: registry.cn-hangzhou.aliyuncs.com/cmy-k8s/apps:v2
ports:
- containerPort: 80 # 容器内部监听的端口
hostPort: 30080 # 宿主机上暴露的端口
name: v2 # 端口名称,用于标识
protocol: TCP # 协议类型,默认为 TCP
说明
hostPort
:- 将容器的端口映射到宿主机的端口。
- 外部可以通过宿主机的 IP 地址和
hostPort
访问容器内的服务。 - 适用于需要直接从集群外部访问单个 Pod 的场景。
- 注意:多个 Pod 不能在同一宿主机上使用相同的
hostPort
。
0.3 port-forward
命令示例
kubectl port-forward ports-xiuxian 30090:80 --address=0.0.0.0
说明
kubectl port-forward
:- 将本地端口转发到 Pod 的指定端口。
- 参数说明:
ports-xiuxian
:目标 Pod 的名称。30090:80
:将本地的30090
端口转发到 Pod 的80
端口。--address=0.0.0.0
:允许从任何 IP 地址访问本地端口(默认仅监听localhost
)。
- 适用于临时访问 Pod 内的服务,例如调试或开发阶段。
0.4 NodePort
类型的 Service
配置文件示例 (02-svc-NodePort.yaml
)
apiVersion: v1
kind: Service
metadata:
name: xiuxian-svc-nodeport
spec:
type: NodePort # 指定 Service 类型为 NodePort
selector:
apps: xiuxian # 根据标签选择后端 Pod
ports:
- port: 8888 # Cluster IP 的端口
targetPort: 80 # Pod 内容器的端口
nodePort: 30080 # 每个 Worker 节点上暴露的端口
说明
NodePort
:- 在每个 Worker 节点上暴露一个静态端口(
nodePort
),外部可以通过<NodeIP>:<nodePort>
访问 Service。 nodePort
的默认范围是30000-32767
,可以自定义配置,但需确保不与其他 Service 冲突。- 适用于需要从集群外部访问服务的场景,但不推荐大规模使用,因为会占用节点端口资源。
- 在每个 Worker 节点上暴露一个静态端口(
port
:- Cluster IP 的端口,仅在集群内部使用。
targetPort
:- Pod 内容器的端口,Service 会将流量转发到该端口。
0.5 总结
hostNetwork
:Pod 使用宿主机的网络名称空间,共享 IP 和端口。hostPort
:将容器端口映射到宿主机端口,适用于单个 Pod 的外部访问。port-forward
:临时将本地端口转发到 Pod 的指定端口,适用于调试和开发。NodePort
:通过在每个 Worker 节点上暴露静态端口,实现从集群外部访问服务。
这些网络配置方式各有适用场景,可以根据实际需求选择合适的方式。