Kubernetes GKE多个Ingress使用单个全局IP

7

我在GKE上有多个运行在k8s上的MSA。每个MSA都在不同的子域名下,例如:

  • msa1.example.com
  • msa2.example.com

我将它们放在了一个单一的Ingress中:

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 ingress 控制器之间共享IP,使两个入口都能使用它?

3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
10
一种解决方法是在您的集群中运行自己的nginx-ingress控制器,并通过LoadBalancer服务类型进行公开。然后,通过添加注释kubernetes.io/ingress.class: "nginx",您将拥有1个IP地址用于您的入口,并能够通过nginx控制器提供所有入口。 参考文献:https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/

这实际上是唯一的解决方案。值得一提的是,使用区域 IP 而不是全球 IP 需要支付费用。 - Mateusz

6

1
这当然是正确的答案,但还有另一个解决方案。 - Mateusz

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,