我应该在Google Cloud带有自定义域和SSL证书上将Ingress vs LoadBalancer用于Kubernetes吗?

问题描述

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

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

现在,我有一个Ingress,可以使用自定义域访问群集了,但是如何向其中添加HTTPS?我怀疑Ingress还会产生LoadBalancer,但我不知道如何根据第一个链接对其进行修改

解决方法

您将需要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

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

,

我怀疑Ingress还会产生LoadBalancer,但我做不到 找出如何根据第一个链接对其进行修改。

您是对的。创建 ingress 对象时,会在幕后自动创建负载均衡器。甚至提到了here

如果您选择使用 Ingress, 这样会创建HTTP(S)负载均衡器,您必须reserve a global static IP address

您甚至可以通过以下方式将其列出在您的 Google云控制台中:Navigation menu-> Networking-> Network services-> Load balancing

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

enter image description here

除了需要手动编辑之外,您还需要修改Ingress资源。

假设您已按照here所述的步骤进行操作,并且一切正常,但只能通过 http 进行,因为未配置 SSL证书,这也是预期的>到目前为止的入口,并且它在后台使用的 Load Balancer 也配置为仅与http一起使用。

如果您遵循the guide you mentioned并且已经配置了 Google管理的SSL证书,则只需添加{{1},即可更新 ingress 资源配置。 } @ldg在他的答案中建议使用注解。

如果您未配置SSL证书,则可以按照here的说明应用以下yaml清单,从kubernetes级别进行操作:

networking.gke.io/managed-certificates: certificate-name

将其另存为文件apiVersion: networking.gke.io/v1beta2 kind: ManagedCertificate metadata: name: example-cert spec: domains: - example.com ,然后运行:

example-cert.yaml

创建后,您可以通过添加与上述注释相同的Yaml清单重新应用 ingress 配置。

kubectl apply -f example-cert.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

然后您可以编辑kubectl get ingress helloweb -o yaml > ingress.yaml 文件并再次重新应用。

添加注释后,在您的 Google云控制台中再次转到ingress.yaml-> Navigation menu-> Networking-> Network services,然后您会注意到与入口相关的负载均衡器协议已从Load balancing更改为HTTP,并且如果证书有效,您应该可以通过HTTPS使用自定义域访问您的网站。