使用公共 ipv6 IP 外部访问双栈 Kuberentes 服务,无需 GCP 中的负载均衡器

问题描述 投票:0回答:1

我在 Google Cloud 中创建了一个双栈 GKE 集群,使用 RequireDualStack 部署了一个示例 Nginx 部署和服务,并创建了一条防火墙规则以允许所有 IPv6 流量

::0/0
到达所有内容。

Pod 具有 IPv6 IP,可以从公共网络访问,没有任何问题;甚至使用 IPv6 的 NodePort 也可以从公共网络访问。该服务也有公共 IPv6 集群 IP,而不是 ULA,但仍然无法从外部访问。

仅供参考:pods IP 范围和服务 IP 范围不同,在 gke 中它是自动分配的并且无法更改。

无法从外部访问服务 IPv6 的原因是什么?有解决方案吗?”

google-cloud-platform google-kubernetes-engine ipv6
1个回答
0
投票

尝试以下故障排除步骤来访问集群外部的服务,这可能有助于解决您的问题:

  • 确保集群运行

    GKE version 1.28
    及以上 (GA)。
    1.26+ GKE
    仅包含 L4 DualStack 的预览版本,不包括 IPv6 静态 IP、标准层网络、自定义 IPv6 子网。

  • 请注意,Pod 或节点不支持将 IPv6 作为单堆栈 IPv6。注意:对于 NodePort 服务,您可以使用 ClusterIP 地址(内部)和端口字段或节点 IP 地址(外部)和 NodePort 字段向 GKE 服务发送请求。每个节点的外部IP地址都可以用来访问服务。

  • 使用以下命令检查防火墙规则是否正确配置:

    gcloud alpha compute firewall-rules describe <firewall name\>

    注意源范围与subnetIpv6CidrBlock相同。目标标签是GKE节点上的标签

  • 验证节点是否已正确分配 IPv6 地址,使用以下命令验证节点是否已为 pod 正确分配 IPv6 地址:

    kubectl get nodes <node-name\> -o go-template --template='{{range .status.addresses}}{{printf "%s: %s\\n" .type .address}}{{end}}'

    kubectl get nodes <node-name\> -o go-template --template='{{range .spec.podCIDRs}}{{printf "%s\\n" .}}{{end}}'

如果上述步骤未能解决您的问题,请尝试使用服务类型负载均衡器

附上故障排除文档以供参考。

© www.soinside.com 2019 - 2024. All rights reserved.