Kubernetes 双协议栈网络验证指南
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
前言
随着互联网向 IPv6 迁移的趋势,Kubernetes 从 1.23 版本开始正式支持 IPv4/IPv6 双协议栈网络。本文将详细介绍如何验证 Kubernetes 集群的双协议栈网络功能是否正常工作。
准备工作
在开始验证前,请确保你的环境满足以下条件:
- 基础设施支持:云服务商或本地基础设施必须能够为 Kubernetes 节点提供可路由的 IPv4 和 IPv6 网络接口
- 网络插件:安装支持双协议栈的 CNI 网络插件
- 集群配置:Kubernetes 集群已启用双协议栈功能
注意:虽然可以在较早版本的 Kubernetes 中进行验证,但双协议栈功能是在 1.23 版本才正式 GA 的。
节点网络验证
检查节点 CIDR 分配
每个双协议栈节点应该被分配一个 IPv4 CIDR 块和一个 IPv6 CIDR 块。可以通过以下命令验证:
kubectl get nodes <node-name> -o go-template --template='{{range .spec.podCIDRs}}{{printf "%s\n" .}}{{end}}'
预期输出示例:
10.244.1.0/24
2001:db8::/64
验证节点接口
检查节点是否正确地识别了 IPv4 和 IPv6 网络接口:
kubectl get nodes <node-name> -o go-template --template='{{range .status.addresses}}{{printf "%s: %s\n" .type .address}}{{end}}'
预期输出应包含节点的 IPv4 和 IPv6 地址:
Hostname: k8s-node-1
InternalIP: 10.0.0.5
InternalIP: 2001:db8:10::5
Pod 网络验证
检查 Pod IP 分配
验证 Pod 是否同时获得了 IPv4 和 IPv6 地址:
kubectl get pods <pod-name> -o go-template --template='{{range .status.podIPs}}{{printf "%s\n" .ip}}{{end}}'
预期输出示例:
10.244.1.4
2001:db8::4
通过 Downward API 验证
可以在 Pod 内部通过环境变量获取 IP 地址信息:
env:
- name: MY_POD_IPS
valueFrom:
fieldRef:
fieldPath: status.podIPs
在容器内执行:
kubectl exec -it <pod-name> -- set | grep MY_POD_IPS
将看到类似输出:
MY_POD_IPS=10.244.1.4,2001:db8::4
检查 /etc/hosts 文件
Kubernetes 会自动将 Pod 的 IP 地址写入容器的 /etc/hosts 文件:
kubectl exec -it <pod-name> -- cat /etc/hosts
输出中应包含 Pod 的双栈 IP 地址:
10.244.1.4 pod01
2001:db8::4 pod01
服务验证
单协议栈服务
创建不指定 ipFamilyPolicy 的 Service 时,Kubernetes 会默认使用单协议栈模式:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
验证服务 IP:
kubectl get svc my-service -o yaml
输出将显示服务只获取了 IPv4 地址。
显式指定 IPv6 优先
可以强制服务使用 IPv6 地址:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ipFamilies:
- IPv6
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
双协议栈服务
创建双协议栈服务:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ipFamilyPolicy: PreferDualStack
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
使用 describe 命令查看详细信息:
kubectl describe svc my-service
输出应显示服务同时拥有 IPv4 和 IPv6 地址。
负载均衡服务
如果云提供商支持 IPv6 负载均衡器,可以创建双协议栈的 LoadBalancer 类型服务:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv6
type: LoadBalancer
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
验证服务:
kubectl get svc my-service
预期输出将显示 IPv6 的 CLUSTER-IP 和 EXTERNAL-IP。
总结
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考