Istio 双栈网络在 AWS 上的实现方案
先决条件
- Kubernetes 1.20 及以上版本支持同时分配 IPv4 和 IPv6 地址。
- Underlay 网络:物理网络基础架构(裸金属或云托管如 AWS/Azure)。
- Overlay 网络:由软件驱动的虚拟化网络(如 Kubernetes CNI 插件),需支持 IPv6 的 CNI(Calico、OVNKubernetes 等)。
- EKS 自 2022 年 1 月起支持 IPv4 或 IPv6,但不能同时支持。
开发环境
- Aspen Mesh 开发双栈功能主要基于 OpenShift 平台。
- 测试环境包括:Kubernetes 集群(OpenShift 4.8+、Kind、KubeAdm)、裸金属、AWS、Azure。
- 相关脚本开源于 GitHub:
github.com/aspenmesh/open-source/aws-dual-stack。
AWS 双栈 OpenShift 集群设置
- 通过 OpenShift 安装程序和客户端工具部署 Installer Provisioned 基础设施。
- 脚本流程:
./openshift-cluster.sh <cluster-name>:创建 IPv4 AWS 基础设施和 Kubernetes 集群。
./openshift-upgrade-aws.sh <cluster-name>:升级 AWS 基础网络以支持双栈。
./openshift-upgrade-cluster.sh <cluster-name>:转换 Kubernetes 集群 IPv4 网络并添加 IPv6。
./openshift-delete-cluster.sh:删除集群。
AWS Underlay 网络
- 在 AWS 中添加 IPv6 至 IPv4 网络的步骤:
- 关联 VPC 和子网与 IPv6 CIDR 块。
- 更新路由表。
- 更新安全组规则。
- 升级负载均衡器。
- 更新 EC2 实例(分配 IPv6 地址)。
Overlay Kubernetes 网络配置
- 配置 IPv4/IPv6 双栈需设置双栈群集网络分配:
- KubeAdm 配置参数:
kube-apiserver:--service-cluster-ip-range 和 --cluster-cidr。
kube-controller-manager:--cluster-cidr、--service-cluster-ip-range。
kube-proxy:--cluster-cidr。
kubelet:手动分配节点地址。
- 修补
network.config.openshift.io 以添加 IPv6 CIDR。
- 等待网络更改完成。
Aspen Mesh 安装
- 注册 Aspen Mesh 帐户并安装 1.11.8 版本(支持 Istio 和双栈功能)。
验证 Pod 网络
- 在双栈命名空间中安装 sleep 容器和 httpbin,配置 Istio 网关和虚拟服务。
- 使用
oc exec 验证 Pod 网络。
- 检查
nslookup --type=aaaa 的 IPv6 DNS 记录。
OpenShift 问题上的 Istio 入口网关
- Istio 覆盖默认为 NLB,不支持双栈模式,需手动升级。
- OpenShift 默认创建经典 LB,不支持双栈。
开源 Istio 双栈功能
- Aspen Mesh 和英特尔正在推动 Istio 双栈功能实现。
- 已提出 RFC 并根据反馈评估下一步。
- 计划在 Istio 中实现双栈功能,但仍在设计阶段。
联系方式
- Josh Tischer (Aspen Mesh):
https://aspenmesh.io