Kubernetes 双栈网络(IPv4/IPv6)详解
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
概述
随着互联网向 IPv6 的逐步迁移,Kubernetes 从 1.21 版本开始默认支持 IPv4/IPv6 双协议栈网络。这种双栈网络架构允许同时为 Pod 和 Service 分配 IPv4 和 IPv6 地址,为现代云原生应用提供了更灵活的网络解决方案。
核心概念
双栈网络在 Kubernetes 中主要实现以下功能:
- 双栈 Pod 网络:每个 Pod 同时获得一个 IPv4 和一个 IPv6 地址
- 双栈 Service:Service 可以同时拥有 IPv4 和 IPv6 的 ClusterIP
- 集群外通信:Pod 可以通过 IPv4 和 IPv6 接口与集群外资源通信
配置要求
要启用双栈网络,需要满足以下条件:
- Kubernetes 版本:1.20 或更高版本(1.21+ 默认启用)
- 基础设施支持:
- 云提供商或其他网络基础设施必须支持双栈
- 节点必须具有可路由的 IPv4/IPv6 网络接口
- 网络插件:必须使用支持双栈的网络插件
配置方法
控制平面组件配置
双栈网络需要在 Kubernetes 控制平面组件中配置相关参数:
# kube-apiserver
--service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR>
# kube-controller-manager
--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>
--service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR>
--node-cidr-mask-size-ipv4=24 # IPv4 默认 /24
--node-cidr-mask-size-ipv6=64 # IPv6 默认 /64
# kube-proxy
--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>
# kubelet(裸机节点需要)
--node-ip=<IPv4 IP>,<IPv6 IP>
CIDR 示例
- IPv4 CIDR 示例:
10.244.0.0/16
- IPv6 CIDR 示例:
fd12:3456:789a:1::/64
Service 配置
Kubernetes 支持创建 IPv4、IPv6 或双栈 Service。Service 的地址族默认与第一个服务集群 IP 范围的地址族相同。
IP 族策略
可以通过 .spec.ipFamilyPolicy
字段配置 Service 的 IP 族策略:
- SingleStack:单栈 Service,使用第一个配置的服务集群 IP 范围
- PreferDualStack:优先双栈,如果支持则分配 IPv4 和 IPv6 地址
- RequireDualStack:必须双栈,不支持则创建失败
IP 族指定
通过 .spec.ipFamilies
可以显式指定地址族顺序:
ipFamilies:
- IPv4
- IPv6 # 双栈
实践示例
双栈 Service 创建
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ipFamilyPolicy: PreferDualStack
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
现有 Service 处理
当集群启用双栈时,现有 Service 会被自动配置:
- 单栈 Service 保持原样
- 无头 Service 会根据第一个服务集群 IP 范围配置
单双栈切换
Service 可以在单栈和双栈之间灵活切换:
- 单栈转双栈:修改
ipFamilyPolicy
为PreferDualStack
或RequireDualStack
- 双栈转单栈:修改
ipFamilyPolicy
为SingleStack
,保留第一个 IP 地址
LoadBalancer 类型 Service
要创建双栈负载均衡器:
apiVersion: v1
kind: Service
metadata:
name: my-lb-service
spec:
type: LoadBalancer
ipFamilyPolicy: PreferDualStack
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
注意:需要云提供商支持双栈负载均衡器。
出站流量处理
对于使用非公开 IPv6 地址的 Pod 访问外部资源时:
- 需要启用透明代理或 IP 伪装
- 将 Pod 的非公开 IPv6 地址转换为公开路由地址
- 可以使用
ip-masq-agent
项目支持双栈集群的 IP 伪装
总结
Kubernetes 双栈网络为现代云原生应用提供了 IPv4 和 IPv6 的无缝集成方案。通过合理配置,可以实现:
- 平滑过渡到 IPv6
- 同时支持传统 IPv4 应用
- 灵活的网络策略控制
- 与现有基础设施兼容
随着 IPv6 的普及,双栈网络将成为 Kubernetes 集群的标准配置,为应用提供更广阔的网络连接能力。
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考