kubernetes gke 多个入口单个全局 ip

kubernetes gke multiple ingresses single global ip

我在 GKE 上的 k8s 上有多个 MSA。每个都在单独的子域中,例如:

我在单个入口中有它:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: main-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: lalala-ip-1
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - hosts:
    - msa1.example.com
    secretName: msa1-tls
  backend:
    serviceName: sink
    servicePort: 80
  rules:
  - host: msa1.example.com
    http:
      paths:
      - path: /.well-known/*
        backend:
          serviceName: letsencrypt
          servicePort: 80
      - path: /*
        backend:
          serviceName: lalala
          servicePort: 80
  - host: msa2.example.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: lalala2
          servicePort: 80

...一切都很好。

问题是,我想将每个 MSA 放在单独的文件中。

问题出在这 kubernetes.io/ingress.global-static-ip-name: lalala-ip-1 行。如果我在两个入口中有它,只有第一个启动是绑定到 IP,但其他的没有。

有没有办法在两个入口之间共享 GKE 入口控制器上的 IP?

确认我的评论:

Only one resource at a time can use a static external IP address.

https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address

一种解决方法是 运行 集群中您自己的 nginx-ingress 控制器并通过 LoadBalancer 服务类型公开它。然后,您的入口将拥有 1 个 IP,并且能够通过添加注释 kubernetes.io/ingress.class: "nginx"

通过 nginx 控制器为所有入口提供服务

参考:https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/

GKE 最近添加了对新 Kubernetes 网关 API 的支持。 GKE 网关实现和 Kubernetes 网关 API 规范目前仍处于 alpha 阶段。

Kubernetes 网关-API,旨在支持这样的用例,您有一个中央网关(具有单个 IP),但想要不同的路由(具有不同的主机名或路径),分别管理对象甚至命名空间。

参考文献: