根据此页面,如果您使用 LoadBalancer,Google Kubernetes 似乎可以制作 Google 托管的 SSL 证书。这就是我想要使用的。
但是,我使用此页面为我的自定义域设置了一个 Ingress。
所以现在,我有一个 Ingress,我可以使用我的自定义域访问我的集群,但是我如何向它添加 HTTPS?我的怀疑是 Ingress 也做了一个 LoadBalancer,但我不知道如何根据第一个链接修改它。
我的怀疑是 Ingress 也做了一个 LoadBalancer,但我不知道如何根据第一个链接修改它。
你是对的。当您创建入口对象时,负载均衡器会在后台自动创建。甚至在这里提到:
如果您选择使用创建 HTTP(S) 负载均衡器的Ingress公开您的应用程序 ,则必须保留一个全局静态 IP 地址。
您甚至可以通过转到-> -> ->在您的Google Cloud Console中列出它。Navigation menu
Networking
Network services
Load 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 使用您的自定义域访问您的网站。HTTP
HTTP(S)
您将需要 2 个负载均衡器来实现您的目标,第一个用于带有重定向的 HTTP,另一个用于 HTTPS。您可以查看此链接以获取有关设置 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
您的可能看起来略有不同,但此功能的重要部分是注释部分。