GCP中无需负载均衡器,为双栈Kubernetes服务分配公网IPv6实现外部访问
让GKE双栈集群Service使用公网主网段IP的实现方法
要让GKE双栈集群的Service直接使用你指定的公网主网段(而非谷歌私有服务段),核心是在集群创建阶段自定义IPv6服务网段,因为集群创建后无法修改服务IP段配置。以下是具体步骤:
1. 规划自定义服务IPv6子网
从你的主网段2600:1900:0:1::/64中划出一个独立的子网分配给Service使用,要求:
- 子网不能和Pod/节点的IP段重叠
- 满足GKE对IPv6服务段的大小要求:至少
/112(每个Service需要一个/128地址),最大/64 - 示例:可以划出
2600:1900:0:1:1::/112作为服务网段
2. 创建带自定义IPv6服务段的双栈GKE集群
使用gcloud命令创建集群时,明确指定Pod的IPv6段和自定义的服务IPv6段,同时开启IP别名和双栈支持:
gcloud container clusters create your-cluster-name \ --network=your-vpc-name \ --subnetwork=your-subnet-name \ --enable-ipv6 \ --cluster-ipv6-cidr=2600:1900:0:1::/64 \ --services-ipv6-cidr=2600:1900:0:1:1::/112 \ --enable-ip-alias \ --release-channel=stable
注意:现有集群无法修改服务IP段,必须重新创建集群。
3. 部署并验证Service的IP分配
部署带RequireDualStack的Nginx Service后,通过以下命令检查Service的IPv6地址是否来自你指定的主网段子网:
kubectl get svc nginx-service -o wide
输出中IPs列的IPv6地址应落在2600:1900:0:1:1::/112范围内。
4. 配置防火墙规则确保公网访问
除了已有的允许::0/0的IPv6流量规则,还需添加针对自定义服务网段的流量放行规则(以80端口为例):
gcloud compute firewall-rules create allow-service-ipv6-public \ --network=your-vpc-name \ --allow=tcp:80 \ --source-ranges=::0/0 \ --destination-ranges=2600:1900:0:1:1::/112
同时确保你的VPC子网已开启IPv6公网路由能力,节点的IPv6地址是公网可路由的。
5. 直接访问Service的IPv6地址
此时Service的IPv6地址属于公网主网段,且防火墙规则已放行流量,你可以直接通过该IPv6地址从公网访问Nginx服务,无需依赖LoadBalancer、Ingress、Gateway或NodePort组件。
内容的提问来源于stack exchange,提问作者Chandan Pasunoori
相关产品推荐
相关产品推荐

