【问题标题】:Can't connect static ip to Ingress on GKE无法将静态 IP 连接到 GKE 上的 Ingress
【发布时间】:2019-08-16 20:20:37
【问题描述】:

我正在尝试将我的入口连接到静态 IP。我似乎正在关注所有教程,但我似乎仍然无法将我的静态 IP 附加到入口。我的入口文件如下(参考静态ip“test-ip”)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-web
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "test-ip"
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/add-base-url: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  rules:
    - http:
        paths:
          - path: /api/
            backend:
              serviceName: api-cluster-ip-service
              servicePort: 5005
          - path: /
            backend:
              serviceName: web-cluster-ip-service
              servicePort: 80

但是,当我运行时

kubectl get ingress ingress-web

返回

kubectl get ingress ingress-web
NAME          HOSTS     ADDRESS   PORTS     AGE
ingress-web   *                   80        4m

没有给出地址。在 VPC 网络中 [外部 IP 地址 ] 静态 ip 在那里,它是全局的,但它一直说:正在使用中,没有人使用

 gcloud compute addresses describe test-ip --global

给予

address: 34.240.xx.xxx
creationTimestamp: '2019-03-26T00:34:26.086-07:00'
description: ''
id: '536303927960423409'
kind: compute#address
name: test-ip
networkTier: PREMIUM
selfLink: https://www.googleapis.com/compute/v1/projects/my-project- adbc8/global/addresses/test-ip
status: RESERVED

我在这里错过了什么?

【问题讨论】:

  • 你能显示gcloud compute addresses describe test-ip --global的输出吗
  • 添加了输出
  • 您是否尝试过在同一区域使用静态 IP 和 LB 服务,正如这里所描述的 stackoverflow.com/a/49691364/11101419

标签: google-cloud-platform kubernetes-ingress static-ip-address nginx-ingress


【解决方案1】:

我花了几个小时试图找出问题所在。 这似乎只是 GKE 的一个错误。

解决的方法是:

  1. 在没有静态 IP 的情况下启动入口
  2. 在 VPC 网络 > 外部 IP 地址下访问 Web 上的云控制台
  3. 等待 Ingress ip 显示
  4. 设置为静态,并为其命名
  5. 添加kubernetes.io/ingress.global-static-ip-name: <ip name> Ingress yaml 和applying。

【讨论】:

  • 这里有点hacky,但这似乎是IP配置的问题。我发现区域存在问题。
【解决方案2】:

我遇到了这个问题。我相信它已经被this pull request 修复了。

变化

kubernetes.io/ingress.global-static-ip-name

kubernetes.io/ingress.regional-static-ip-name

为我工作。

【讨论】:

  • 这也是我的错误(要求全局,但已经保留了区域 IP)。核心点:一定要标注你预留的IP类型!
  • 更正:我也试过区域,它仍然没有工作,但删除区域 IP 并创建一个全局 IP 允许它通过。我猜 GKE HTTPS 入口与区域 IP 不兼容?
【解决方案3】:

您必须确保您在 GCP 中创建的 IP 是全局的而不是区域的,以便在您的入口中使用以下注释:

kubernetes.io/ingress.global-static-ip-name

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,但经过一些研究和测试,我设法解决了这个问题。这些是我采取的步骤:

    1. 首先您需要在 GCP 上创建一个全局静态 IP 地址。 我碰巧使用 Terraform 来执行此操作,例如,请参见下面的示例

      资源“google_compute_global_address”“静态”{ 名称=“全球测试IP” 项目 = var.gcp_project_id address_type = "外部" }

    基于此文档:https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_global_address

    不过,您可以使用 GCP 控制台来执行此操作。 注意:我在与我的 GKE 集群相同的 GCP 项目中创建了这个全局静态 IP。

    1. 完成全局静态 IP 的创建后,我将以下注释添加到 Kubernetes 入口 yaml 文件并应用它(即 kubectl apply -f ingress.yaml):

      注释:
      kubernetes.io/ingress.global-static-ip-name: "global-test-ip"

    注意:在我应用此入口更改后,入口和 Google 负载平衡器需要几分钟才能更新。

    【讨论】:

      猜你喜欢
      • 2021-02-01
      • 2019-01-13
      • 1970-01-01
      • 2018-07-23
      • 2020-10-12
      • 1970-01-01
      • 2020-04-23
      • 2019-04-13
      • 1970-01-01
      相关资源
      最近更新 更多