是否可以在不停机的情况下重新配置Kubernetes中运行的入口?
我们目前面临以下情况:是否可以在不停机的情况下重新配置Kubernetes中运行的入口?,kubernetes,google-cloud-platform,google-kubernetes-engine,kubernetes-ingress,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,Kubernetes Ingress,我们目前面临以下情况: Ingress1_legacy: service.domain.com / >> service_legacy Ingress2_new: service_one.domain.com, service_two.domain.com /one >> service_new_one /two >> service_new_two 我们的计划是无缝地将service.domain.com重定向到service\u new\u
Ingress1_legacy: service.domain.com
/ >> service_legacy
Ingress2_new: service_one.domain.com, service_two.domain.com
/one >> service_new_one
/two >> service_new_two
我们的计划是无缝地将service.domain.com重定向到service\u new\u one。现在的想法是编辑Ingress1,指向如下的service\u new\u one:
Ingress1_legacy (updated): service.domain.com
/ >> service_new_one
我们的经验是,一旦我们更改Ingress1_legacy的配置,调用service.domain.com将导致502。这种情况持续了足够长的时间,我们可以更好地回滚到原始配置
那么这是一个可行的策略吗?我们的假设正确吗?入口中服务路由的更改配置应允许无缝、立即迁移到其他服务?或者入口配置的更改通常会导致负载平衡的停机吗?简短回答:当您更新入口资源时,由于谷歌云平台和Kubernetes云平台中所需的过程,会有少量停机 我不排除有办法尽量减少或取消停机时间,但如果您只是更新入口,您将体验到它
小实验 我们有以下入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /index.html
backend:
serviceName: httpd
servicePort: 80
- path: /apache
backend:
serviceName: nginx
servicePort: 80
4个服务nginx
,nxing2
,httpd
和httpd2
连接到4个不同的部署,每个部署在不同的节点上
运行:
并创建:
kind: Service
apiVersion: v1
metadata:
name: httpd
spec:
selector:
run: httpd2
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
---
kind: Service
[...]
我们连接并想象经典“它起作用了!”
一旦将入口更改为点nginx2
和httpd2
:
- 约1分钟继续提供旧服务
- 约1分钟的
会导致“/nginx
”和错误:服务器错误
”/index.html
”默认后端-404
- 3分钟后,我们终于回到了稳定的状态
kind: Service
apiVersion: v1
metadata:
name: httpd
spec:
selector:
run: httpd2
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
---
kind: Service
[...]