3-2-44、k8s网络-kubernetes对ipv4和ipv6双栈的支持
·
1、kubernetes对ipv4和ipv6双栈的支持
Kubernetes 从 1.16 版本开始试验性支持 IPv4/IPv6 双栈网络,1.23 版本起转为正式 GA 特性。双栈网络允许 Pod 同时分配 IPv4 和 IPv6 地址,实现双协议栈通信。以下是其核心特性与配置要点:
1. 启用条件
- Kubernetes 版本:≥ 1.23(GA 版本)
- 节点系统:Linux 内核≥4.19,支持 IPv6
- 网络插件:Calico、Flannel、Weave Net 等需升级到支持双栈的版本
- API 服务器参数:需添加
--feature-gates=IPv6DualStack=true(1.23 + 默认启用)
2. 网络配置要求
API Server 与 Controller Manager
需配置 --cluster-cidr 和 --service-cluster-ip-range 为双栈格式:
yaml
--cluster-cidr=10.244.0.0/16,fd00:10:244::/48
--service-cluster-ip-range=10.96.0.0/12,fd00:10:96::/112
kube-proxy 配置
确保 config.conf 中启用双栈:
yaml
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- IPv6
3. Pod 与 Service 双栈示例
Pod 双栈分配
创建 Pod 时自动分配 IPv4 和 IPv6 地址:
yaml
apiVersion: v1
kind: Pod
metadata:
name: dual-stack-pod
spec:
containers:
- name: nginx
image: nginx
双栈 Service
yaml
apiVersion: v1
kind: Service
metadata:
name: dual-stack-service
spec:
ipFamilyPolicy: PreferDualStack # 策略:优先双栈
ports:
- port: 80
selector:
app: nginx
4. 验证方法
检查 Pod IP 分配
bash
kubectl get pods -o wide
# 输出示例:
# NAME READY STATUS IPV4 IPV6
# dual-stack-pod 1/1 Running 10.244.1.2 fd00:10:244:0:1::2
Service IP 验证
bash
kubectl get svc dual-stack-service
# 输出示例:
# NAME TYPE CLUSTER-IPV4 CLUSTER-IPV6 PORT(S)
# dual-stack-service ClusterIP 10.96.100.100 fd00:10:96::100 80/TCP
5. 网络插件配置示例(Flannel)
需使用支持双栈的 Flannel 版本,并添加 --kube-subnet-mgr 参数:
yaml
net-conf.json: |
{
"Network": "10.244.0.0/16,fd00:10:244::/48",
"Backend": {
"Type": "vxlan"
},
"EnableIPv6": true
}
6. 注意事项
- 节点网络配置:所有节点需启用 IPv6 支持(
net.ipv6.conf.all.disable_ipv6=0)。 - 负载均衡器:使用云提供商 LB 时,需确认其支持双栈。
- DNS 配置:CoreDNS 需配置为支持 AAAA 记录解析。
- 应用兼容性:应用需支持同时监听 IPv4 和 IPv6 端口。
7. 限制与已知问题
- 部分网络插件的双栈实现可能存在差异。
- 跨集群通信时需确保两端均支持双栈。
- 部分旧版 CNI 插件不支持双栈,需升级至最新版本。
通过合理配置,Kubernetes 双栈网络可无缝支持 IPv4/IPv6 混合环境,为集群迁移提供平滑过渡方案。
更多推荐
所有评论(0)