在我的实验室帐户中进行了一些研究和测试之后,我将解释如何在许多 LoadBalancer 中重用/重新分配当前的 ManagedCertificate。
如上所述here:
当您的域解析为多个负载均衡器(多个 Ingress)的 IP 地址时,您应该创建一个 ManagedCertificate 资源并将其附加到所有 Ingress。如果您改为创建许多 ManagedCertificate 资源并将每个资源附加到单独的 Ingress,则证书颁发机构可能无法验证您的域的所有权,并且您的某些证书可能无法配置
我正在区域集群(旧)上的 Kubernetes 1.17.4 中运行一个简单的应用程序,并希望使用 GKE kubernetes 1.17.5 迁移到新的区域集群。
在旧集群中,我创建了一个ManagedCertified 和一个入口。
在新集群中,我将只创建一个重用以前的 ManagedCertificate 的入口:
- 新的负载均衡器 IP
让我们开始为 LoadBalancer 分配一个新的 IP 地址
gcloud compute addresses create newip --global
使用以下命令获取新 IP:
gcloud compute addresses describe newip --global
结果:
address: 34.107.xxx.xxx
...
- 部署应用程序
对于这个例子,我使用了一个简单的echo-server 部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo
spec:
selector:
matchLabels:
app: echo
template:
metadata:
labels:
app: echo
spec:
containers:
- name: echo
image: mendhak/http-https-echo
ports:
- name: http
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: echo-svc
spec:
type: NodePort
selector:
app: echo
ports:
- protocol: TCP
port: 80
targetPort: 80
- 创建入口
你需要从keyingress.gcp.kubernetes.io/pre-shared-cert中获取值从旧入口,并用新ip配置注解kubernetes.io/ingress.global-static-ip-name
名字的
您可以使用命令kubectl get ing old-ingress -oyaml 获取上一个集群上的密钥。
为什么?这是解释here:
托管证书使用 kubernetes.io/pre-shared-cert 注释与 Ingress 通信。
和here:
ingress.gcp.kubernetes.io/pre-shared-cert:使用此注解来引用证书和密钥
最终的 yaml 将如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-new-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: newip #new ip name
ingress.gcp.kubernetes.io/pre-shared-cert: mcrt-a798051f-a50d-4b38-84b1-xxxxxxxxxxxx # from the old ingress
spec:
rules:
- http:
paths:
- backend:
serviceName: echo-svc
servicePort: 80
path: /
应用入口规范并等待负载均衡器配置...几分钟后使用kubectl get ing 验证是否一切正常并尝试卷曲 ip(SSL 将不匹配,因为您正在使用 ip)
curl -IL -k 34.107.xxx.xxx
HTTP/2 200
x-powered-by: Express
content-type: application/json; charset=utf-8
content-length: 647
etag: W/"287-qCxPIULxqrMga5xHN8AAKMHsUi4"
date: Wed, 20 May 2020 11:49:14 GMT
via: 1.1 google
alt-svc: clear
- 更改 DNS 记录
此时,我们有了一个使用从旧集群提供的 SSL 的入口功能应用程序。
要将所有流量从以前的集群移动到新集群,您只需使用新 ip 更改 DNS 记录。
根据您使用的 DNS 提供商,您可以使用新 ip 创建一个新的 dns 条目,并使用 dns 权重、循环等控制流量...
参考资料:
https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs