> 技术文档 > K8S 端口大全详解_kubernetes端口号

K8S 端口大全详解_kubernetes端口号

在 Kubernetes 中,端口组件间通信、服务暴露和网络隔离的关键要素。以下是 K8S 中各类端口的详细解析,包括组件端口、服务端口和安全策略:

一、核心组件端口

1. 控制平面组件
组件 默认端口 协议 方向 用途 API Server 6443 HTTPS 外部→控制平面 安全的 API 访问端口,所有组件通过此端口与 API Server 通信 API Server 8080 HTTP 本地→控制平面 非安全端口(已弃用),仅允许本地访问,用于测试 etcd 2379 HTTPS 内部 etcd 客户端端口,API Server 通过此端口读写数据 etcd 2380 HTTPS 内部 etcd 集群间通信端口(节点间数据复制) Scheduler 10259 HTTPS 内部 Scheduler 健康检查和指标端口 Controller Manager 10257 HTTPS 内部 Controller Manager 健康检查和指标端口
2. 工作节点组件
组件 默认端口 协议 方向 用途 Kubelet 10250 HTTPS 控制平面→节点 Kubelet 安全端口,API Server 通过此端口获取节点和 Pod 状态 Kubelet 10255 HTTP 外部→节点 Kubelet 只读端口(已弃用),返回非敏感信息(如 Pod 列表) kube-proxy 10256 HTTP 外部→节点 kube-proxy 健康检查端口
3. 网络组件
组件 默认端口 协议 方向 用途 CoreDNS 53 UDP/TCP 内部 集群 DNS 服务端口,Pod 通过此端口解析域名 Ingress Controller 80/443 TCP 外部→集群 暴露 HTTP/HTTPS 服务的入口端口

二、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. 控制平面节点
方向 源地址 目标端口 用途 入站 工作节点 6443/TCP Kubelet 访问 API Server 入站 其他控制平面节点 2379/TCP etcd 客户端通信 入站 其他控制平面节点 2380/TCP etcd 集群通信
2. 工作节点
方向 源地址 目标端口 用途 入站 控制平面节点 10250/TCP API Server 访问 Kubelet 入站 外部网络 30000-32767/TCP NodePort 服务访问 入站 内部网络 10255/TCP 只读 Kubelet API(可选) 出站 所有 53/UDP 访问 CoreDNS

五、端口冲突排查

检查节点端口占用

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 的端口体系涉及组件通信、服务暴露和安全控制三个层面:

  1. 组件端口:控制平面与工作节点通过特定端口交互,需确保安全通信。
  2. Service 端口:通过 ClusterIP、NodePort、LoadBalancer 等类型实现灵活的服务暴露。
  3. 安全策略:通过防火墙和 NetworkPolicy 限制端口访问,保护集群安全。

理解各端口的用途和配置方式,是构建高性能、安全可靠 K8S 集群的基础