K8S 端口大全详解_kubernetes端口号
在 Kubernetes 中,端口是组件间通信、服务暴露和网络隔离的关键要素。以下是 K8S 中各类端口的详细解析,包括组件端口、服务端口和安全策略:
一、核心组件端口
1. 控制平面组件
2. 工作节点组件
3. 网络组件
二、Service 类型与端口映射
Kubernetes 的 Service 通过不同类型实现端口映射和流量分发:
1. ClusterIP(默认类型)
apiVersion: v1kind: Servicespec: type: ClusterIP ports: - port: 80 # 服务端口(集群内部访问) targetPort: 8080 # Pod端口(容器实际监听) protocol: TCP
访问方式:http://:80 → Pod:8080
2. NodePort
spec: type: NodePort ports: - port: 80 # 服务端口 targetPort: 8080 # Pod端口 nodePort: 30080 # 节点端口(范围30000-32767)
访问方式:http://:30080 → Service:80 → Pod:8080
3. LoadBalancer
spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 externalTrafficPolicy: Local # 可选:仅转发到本地节点的Pod
访问方式:
外部负载均衡器 → :80 → NodePort → Service:80 → Pod:8080
云厂商支持:AWS ELB、GCP LoadBalancer 等自动创建外部负载均衡器。
4. ExternalName
spec: type: ExternalName externalName: example.com # 外部服务域名 ports: - port: 443
访问方式:集群内部通过service-name.namespace.svc.cluster.local
解析到example.com
。
三、Ingress 与端口配置
Ingress 用于暴露 HTTP/HTTPS 服务,通常配合 Ingress Controller 使用:
1. Ingress 规则示例
apiVersion: networking.k8s.io/v1kind: Ingressspec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: my-service port: number: 80 # 指向Service的端口
2. Ingress Controller 端口
- Nginx Ingress:默认监听节点的 80(HTTP)和 443(HTTPS)端口。
- 配置示例:
spec: ports: - name: http port: 80 targetPort: http protocol: TCP - name: https port: 443 targetPort: https protocol: TCP
四、安全组与防火墙配置
在生产环境中,需通过安全组或防火墙限制端口访问:
1. 控制平面节点
2. 工作节点
五、端口冲突排查
检查节点端口占用
ss -tulpn | grep LISTEN # 查看所有监听端口
查看 Service 端口配置
kubectl get services -o wide
检查 Pod 容器端口
kubectl describe pod
排查 NodePort 范围冲突
# 查看kube-apiserver配置kubectl get configmap kube-apiserver -n kube-system -o yaml# 确认service-node-port-range参数(默认30000-32767)
六、常见误区与最佳实践
1. 误区
- 混用端口类型:例如将 NodePort 直接暴露给外部,而不使用 Ingress。
- 忽略端口安全:未通过防火墙限制非必要端口访问。
- 固定 NodePort 分配:手动指定 NodePort 而非自动分配,可能导致冲突。
2. 最佳实践
- 使用 Ingress 暴露 HTTP 服务:避免直接使用 NodePort,简化域名管理和 TLS 配置。
- 限制 NodePort 使用:仅在无法使用 LoadBalancer 或 Ingress 时使用 NodePort。
- 监控端口使用:定期检查节点端口占用情况,避免意外端口暴露。
- 最小权限原则:通过 NetworkPolicy 限制 Pod 间的端口访问。
总结
Kubernetes 的端口体系涉及组件通信、服务暴露和安全控制三个层面:
- 组件端口:控制平面与工作节点通过特定端口交互,需确保安全通信。
- Service 端口:通过 ClusterIP、NodePort、LoadBalancer 等类型实现灵活的服务暴露。
- 安全策略:通过防火墙和 NetworkPolicy 限制端口访问,保护集群安全。
理解各端口的用途和配置方式,是构建高性能、安全可靠 K8S 集群的基础