问题描述
根据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
:
除了需要手动编辑之外,您还需要修改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使用自定义域访问您的网站。