1

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

但是,我使用此页面为我的自定义域设置了一个 Ingress。

所以现在,我有一个 Ingress,我可以使用我的自定义域访问我的集群,但是我如何向它添加 HTTPS?我的怀疑是 Ingress 也做了一个 LoadBalancer,但我不知道如何根据第一个链接修改它。

4

3 回答 3

2

我的怀疑是 Ingress 也做了一个 LoadBalancer,但我不知道如何根据第一个链接修改它。

你是对的。当您创建入口对象时,负载均衡器会在后台自动创建。甚至在这里提到:

如果您选择使用创建 HTTP(S) 负载均衡器的Ingress公开您的应用程序 ,则必须保留一个全局静态 IP 地址

您甚至可以通过转到-> -> ->在您的Google Cloud Console中列出它。Navigation menuNetworkingNetwork servicesLoad balancing

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

在此处输入图像描述

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

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

如果您按照您提到的指南并已经配置了Google-managed SSL certificate ,您只需要通过添加@ldg 在他的回答中建议的注释来更新您的入口资源配置。networking.gke.io/managed-certificates: certificate-name

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

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

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

kubectl apply -f example-cert.yaml

创建后,您可以从与以前相同的 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

然后您可以编辑该ingress.yaml文件并再次重新应用它。

添加注释后,再次在您的Google Cloud Console中转到Navigation menu-> Networking-> Network services->Load balancing您会注意到与入口关联的负载均衡器的协议已更改为,如果证书有效,您应该可以通过 HTTPS 使用您的自定义域访问您的网站。HTTPHTTP(S)

于 2020-09-30T20:41:51.820 回答
1

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

于 2020-09-30T05:22:46.857 回答
1

您需要将托管证书关联到您的入口清单。您在哪里为您设置值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

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

于 2020-09-30T16:11:07.900 回答