我应该在 Google 云(使用自定义域和 SSL 证书)上为 Kubernetes 使用 Ingress 还是 LoadBalancer?

Should I use Ingress vs LoadBalancer for Kubernetes on Google Cloud (with custom domain and an SSL certificate)?

根据 this page,如果您使用 LoadBalancer,Google Kubernetes 似乎可以生成 Google 托管 SSL 证书。这就是我想要使用的。

但是,我使用 this page 为我的自定义域设置了 Ingress。

所以现在,我有一个 Ingress,我可以使用我的自定义域访问我的集群,但我如何向它添加 HTTPS?我的怀疑是Ingress也做了一个LoadBalancer,但是按照第一个想不出怎么修改link.

您需要有 2 个负载平衡器才能实现您的目标,第一个用于带重定向的 HTTP,另一个用于 HTTPS。您可以查看此 link 以获取有关设置 HTTPS 负载平衡器的官方指南。

您需要将托管证书关联到您的入口清单。在设置 kubernetes.io/ingress.global-static-ip-name 值的位置,您应该可以添加 networking.gke.io/managed-certificates: *certificate-name*

参见:https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs

入口示例(来自那些文档)如下所示:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-name
  annotations:
    kubernetes.io/ingress.global-static-ip-name: address-name
    networking.gke.io/managed-certificates: certificate-name
spec:
  backend:
    serviceName: service-name
    servicePort: service-port

您的可能看起来略有不同,但此功能的重要部分是注释部分。

My suspicion is that Ingress also makes a LoadBalancer, but I can't figure out how to modify it according to the first link.

你是对的。当您创建 ingress 对象时,会在幕后自动创建 load balancer。甚至提到 here:

If you choose to expose your application using an Ingress, which creates an HTTP(S) Load Balancer, you must reserve a global static IP address.

您甚至可以通过转到 Navigation menu -> Networking -> [=16= 将其列在 Google Cloud Console 中] -> Load balancing.

最简单的编辑方法是单击它旁边的 3 个点,然后单击 Edit:

但是您需要修改 Ingress 资源而不是手动编辑它。

假设您已按照概述的步骤进行操作 here 并且一切都按预期工作,但只能通过 http,这也是预期的,因为您没有配置 SSL 证书 到目前为止你的入口和它在幕后使用的 负载平衡器 也被配置为仅使用 http。

如果您关注the guide you mentioned并且已经配置了Google-managed SSL证书,您只需要更新您的ingress 通过添加 networking.gke.io/managed-certificates: certificate-name 注释来配置资源,正如@ldg 在他的回答中所建议的那样。

如果您没有配置您的 SSL 证书,您可以通过应用以下 yaml 清单从 kubernetes 级别执行此操作,如 here 所述:

apiVersion: networking.gke.io/v1beta2
kind: ManagedCertificate
metadata:
  name: example-cert
spec:
  domains:
    - example.com

将其保存为文件 example-cert.yaml 然后 运行:

kubectl apply -f example-cert.yaml

创建后,您可以 re-apply 您的 ingress 配置来自与之前相同的 yaml 清单,并添加了上述注释。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: helloweb
  annotations:
    kubernetes.io/ingress.global-static-ip-name: helloweb-ip
    networking.gke.io/managed-certificates: example-cert ### 
  labels:
    app: hello
spec:
  backend:
    serviceName: helloweb-backend
    servicePort: 8080

如果出于某种原因你想获得你根据你的 运行ning 配置部署的入口,你可以 运行:

kubectl get ingress helloweb -o yaml > ingress.yaml

然后您可以编辑 ingress.yaml 文件并再次 re-apply 它。

添加注释后,再次进入您的 Google Cloud ConsoleNavigation menu -> Networking -> Network services -> Load balancing 并且您会注意到与入口关联的 负载平衡器 协议 已从 HTTPHTTP(S) 如果证书有效,您应该能够通过 HTTPS 使用您的自定义域访问您的网站。