【发布时间】:2022-01-14 17:37:05
【问题描述】:
我需要为一些服务提供一些到 GKE 实例的 https 路由。显然有很多方法可以做到这一点,我宁愿尽可能保持 GCP 原生。
使用 GKE 原生资源我可以实现这样的目标:
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: tools-managed-cert-toola
namespace: toola
spec:
domains:
- tools.acme-uat.com
---
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: tools-managed-cert-toolb
namespace: toolb
spec:
domains:
- tools.acme-uat.com
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: toola-ingress
namespace: toola
annotations:
kubernetes.io/ingress.global-static-ip-name: "acme-tools-ip"
networking.gke.io/managed-certificates: plumbing-managed-cert-toola
kubernetes.io/ingress.class: "gce"
spec:
rules:
- host: "tools.acme-uat.com"
http:
paths:
- pathType: Prefix
path: "/toola"
backend:
service:
name: toola-server
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: toolb-ingress
namespace: toolb
annotations:
kubernetes.io/ingress.global-static-ip-name: "acme-tools-ip"
networking.gke.io/managed-certificates: plumbing-managed-cert-toolb
kubernetes.io/ingress.class: "gce"
spec:
rules:
- host: "tools.acme-uat.com"
http:
paths:
- pathType: Prefix
path: "/toolb"
backend:
service:
name: toolb-server
port:
number: 80
这感觉像是错误的方向。将 GKE 实例上的服务切换到 NodePort 并提供上游 HTTPS LoadBalancer 来管理路由和 TLS 终止是否更传统?这显然需要编写脚本,所以如果有办法,首选 GKE 原生方法?
任何建议将不胜感激。
干杯
【问题讨论】:
-
我不确定我是否理解您在这里想要实现的目标。您想在 GKE 上部署两个应用程序(toola 和 toolb)并将它们暴露在 tools.acme-uat.com/toola 和 tools.acme-uat.com/toolb 之后?您是否关心 tools.acme-uat.com 是否指向相同的 IP 和证书?
-
是的。我宁愿使用 1 个 ip 证书。这种方式感觉很笨拙,因为我在不同的命名空间中有相同 IP 的两个证书。我的直觉方法是使用边缘代理来管理基于路径的路由,但我更喜欢保持 GKE 原生。那么,问题是,以上是标准方法吗?
-
啊哈,我明白了,您的应用程序位于不同的命名空间中。所以 Kubernetes Ingress 是命名空间绑定的,你不能在与 Ingress 不同的命名空间中引用后端。不幸的是,您将遇到的问题是您不能将同一个域用于两个不同的 ManagedCertificates。域 (tools.acme-uat.com) 必须解析为 Ingress 的 IP 地址,ManagedCertificates 才能正常工作。您将不得不使用两个域,可能是 toola.tools.acme-uat.com 和 toolb.tools.acme-uat.com
-
感谢您的 cmets。非常感谢。
-
别担心,我建议你看看网关 API,GKE 中的下一代入口 API cloud.google.com/kubernetes-engine/docs/concepts/gateway-api
标签: google-cloud-platform google-kubernetes-engine