【问题标题】:GCP create GKE service with static private IP, stuck in Pending stateGCP 使用静态私有 IP 创建 GKE 服务,卡在 Pending 状态
【发布时间】:2021-03-15 11:52:21
【问题描述】:

在过去的一年中,我大约每 2 个月创建新的微服务,每次都是相同的过程。

预留私有IP

gcloud compute addresses create my-internal-lb \
                                --region europe-west3 \
                                --addresses 10.223.0.192 \
                                --subnet <subnet_name>

并将其放入 kubernetes 服务中

apiVersion: v1
kind: Service
metadata:
  name: <app_name_lb>
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
    networking.gke.io/internal-load-balancer-allow-global-access: "true"
  labels:
    app: <app_name>
    env: <env>
spec:
  type: LoadBalancer
  selector:
    app: <app_name>
    env: <env>
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  loadBalancerIP: 10.223.0.192
  externalTrafficPolicy: Local

但现在我看到我的新服务卡在待处理状态

$ kubectl get services
NAME                             TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                         AGE
<app_name_lb>                    LoadBalancer   10.190.93.199   <pending>      80:32767/TCP                    22m

而 GCP 将 IP 视为 RESERVED 而不是 IN_USE,所以应该没有问题,有人知道为什么会这样吗?

$ gcloud compute addresses list | grep "<app_name_lb>"
<app_name_lb>      10.223.0.192     INTERNAL  GCE_ENDPOINT            europe-west3  <subnet_name>     RESERVED

我会补充一点,我已经多次这样做了,其他应用程序也可以正常工作

<other_app_lb>          LoadBalancer   10.190.86.56    10.223.0.209   80:<32k port>/TCP                    37d

我会补充一点,我有这个问题好几天了,一直来来去去,在多个子网/区域上进行了测试,不同的 IP 仍然是相同的待处理状态,任何帮助将不胜感激


我想我可能已经达到了 IN_USE 地址的限制 - 检查一下

【问题讨论】:

    标签: kubernetes google-cloud-platform google-kubernetes-engine


    【解决方案1】:

    你对 kubectl describe svc 有什么看法?应该有错误。

    请注意,如果您使用的是 1.17+ 版本,现在是 networking.gke.io/load-balancer-type: "Internal" 而不是 cloud.google.com/load-balancer-type: "Internal"

    还请注意以下几点:根据Restrictions for internal TCP/UDP load balancers

    对于运行 Kubernetes 1.7.X 或更高版本的集群,而 clusterIP 保持不变,内部 TCP/UDP 负载平衡器不能使用保留 IP 地址。 spec.loadBalancerIP 字段仍然可以使用 一个未使用的 IP 地址来分配一个特定的内部 IP。

    【讨论】:

    • 我是否正确地解释了摘录,从 1.7 开始我们不能有一个带有静态 IP 的内部 LB?如果是,那么在静态 IP 上公开内部服务的替代方法是什么?
    【解决方案2】:

    我对 IN-USE 地址、后端服务和防火墙规则达到了限制(只有后端服务处于其限制)的配额限制 - 要求谷歌增加配额并等待一天解决问题

    【讨论】:

      【解决方案3】:

      我希望这仍然有帮助。

      我看到你使用这些命令通过 Gcloud 创建了内部 IP

      gcloud compute addresses create my-internal-lb \
                                      --region europe-west3 \
                                      --addresses 10.223.0.192 \
                                      --subnet <subnet_name>
      

      但是,您缺少一个标志

      --用途 SHARED_LOADBALANCER_VIP

      这是内部负载平衡器获取分配给它的静态内部 IP 所必需的。 此外,如果您的集群位于共享 VPC 服务项目中,但在宿主项目中使用共享 VPC 网络:我们将使用

      gcloud compute addresses create IP_ADDR_NAME \
          --project SERVICE_PROJECT_ID \
          --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
          --address= IP_ADDRESS \
          --region REGION \
          --purpose SHARED_LOADBALANCER_VIP
      

      【讨论】:

        猜你喜欢
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        • 2020-04-23
        • 2019-02-21
        • 1970-01-01
        • 1970-01-01
        • 2021-02-01
        相关资源
        最近更新 更多