jan*_*ogt 4 google-kubernetes-engine
我目前正在运行一个区域 GKE 集群,并希望迁移到一个新的区域集群。旧集群有一个带有公共 IP 的入口对象,使用谷歌托管证书进行 HTTPS 终止。
我的移民计划是:
kubectl apply -f clusterConfig.yaml
.最大的问题是,ManagedCertificates 至少需要 15 分钟。移动IP后准备就绪。这将使所有服务在此时间段内不可用。在新的 ManagedCertificates 准备好之前,有没有办法在新集群中使用旧的 ManagedCertificates 的密钥?
在我的实验室帐户中进行了一些研究和测试之后,我将解释如何在许多 LoadBalancer 中重用/重新分配当前的 ManagedCertificate。
正如这里提到的:
当您的域解析为多个负载均衡器(多个 Ingress)的 IP 地址时,您应该创建一个 ManagedCertificate 资源并将其附加到所有 Ingress。如果您改为创建许多 ManagedCertificate 资源并将每个资源附加到单独的 Ingress,则证书颁发机构可能无法验证您的域的所有权,并且您的某些证书可能无法提供
我正在区域集群(旧)上的 Kubernetes 1.17.4 中运行一个简单的应用程序,并希望使用 GKE kubernetes 1.17.5 移动到新的区域集群。
在旧集群中,我创建了一个ManagedCertified
和一个入口。在新集群中,我将只创建一个重用前一个的入口ManagedCertificate
:
让我们开始为 LoadBalancer 分配一个新的 IP 地址
gcloud compute addresses create newip --global
Run Code Online (Sandbox Code Playgroud)
使用以下命令获取新 IP:
gcloud compute addresses describe newip --global
Run Code Online (Sandbox Code Playgroud)
结果:
address: 34.107.xxx.xxx
...
Run Code Online (Sandbox Code Playgroud)
对于这个例子,我使用了一个简单的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
Run Code Online (Sandbox Code Playgroud)
您需要ingress.gcp.kubernetes.io/pre-shared-cert
从旧 ingress的 key 中获取值,并kubernetes.io/ingress.global-static-ip-name
使用新的 ip
名称配置注释
您可以使用该命令kubectl get ing old-ingress -oyaml
获取上一个集群上的密钥。
为什么?这在这里解释:
托管证书使用
kubernetes.io/pre-shared-cert
注释与 Ingress 通信。
和这里:
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: /
Run Code Online (Sandbox Code Playgroud)
应用入口规范并等待负载均衡器配置......几分钟后验证一切是否正常使用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
Run Code Online (Sandbox Code Playgroud)
在这一点上,我们有一个使用旧集群提供的 SSL 的入口功能应用程序。
要将所有流量从以前的集群移动到新集群,您只需使用新 ip 更改 DNS 记录。
根据您使用的 DNS 提供商,您可以使用新的 ip 创建一个新的 dns 条目并使用 dns 权重、循环等控制流量...
参考:
https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs
归档时间: |
|
查看次数: |
236 次 |
最近记录: |