kubernetes - 是否可以在不停机的情况下重新配置在 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_new_one。现在的想法是像这样编辑 Ingress1 以指向 service_new_one:

Ingress1_legacy (updated): service.domain.com
  / >> service_new_one

我们的经验是,一旦我们更改 Ingress1_legacy 的配置,对 service.domain.com 的调用就会导致 502。这种情况持续了足够长的时间,以便我们更好地回滚到原始配置。

那么这是一个可行的策略吗?我们的假设是否正确,即 Ingress 中服务路由的更改配置应该允许无缝、立即迁移到其他服务?或者 Ingress 配置的更改通常会导致负载平衡出现一些停机时间?

最佳答案

简短回答:当您更新入口资源时,由于 Google Cloud Platform 和 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 个服务 nginxnxing2httpdhttpd2 分别对应 4 个不同的部署一个不同的节点。

运行:

kubectl run nginx2 --image=nginx
kubectl run nginx2 --image=nginx
kubectl run httpd --image=httpd:2.4
kubectl run httpd2 --image=httpd:2.4

并创建:

kind: Service
apiVersion: v1
metadata:
  name: httpd
spec:
  selector:
    run: httpd2
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
---
kind: Service
[...]

我们连接到 http://ingress-ip/index.html我们将经典的“有效!

形象化

只要将入口更改为指向 nginx2httpd2:

  • ~ 1分钟继续服务老服务
  • ~ 1 分钟 /nginx 将您带到“错误:服务器错误”和 /index.html默认后端 - 404
  • 3 分钟后,我们终于回到了稳定状态

关于kubernetes - 是否可以在不停机的情况下重新配置在 Kubernetes 中运行的 Ingress?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49490918/

相关文章:

kubernetes - 使用Kaniko从Kubernetes CloudBees Jenkins共享库构建容器时出现问题

python - 情绪分析数据未显示在 csv 文件中

python - 如何在 Python 中列出 Google Storage 中的存储桶?

firebase - firebase 存储是存储网页上使用的图像的好地方吗?

kubernetes - 在 Google Container Engine 上访问 Kubernetes API

kubernetes - openshift kubernetes版本和google kubernetes的区别

kubernetes - 如果 pod 死亡并在另一个节点上再次上升,kubernetes 的 HostPath 卷会发生什么情况?

kubernetes - 具有容器原生负载平衡的 GKE Ingress 未检测到运行状况检查(字段 'resource.httpHealthCheck' 的值无效)

kubernetes - Google Kubernetes引擎和VPN

python - 从 GKE 调用 tf.io.gfile 方法时经常出现 DNS 失败 : "Couldn' t resolve host 'www.googleapis.com' "