【问题标题】:Is a reconfiguration of running Ingress in Kubernetes possible without downtime?是否可以在不停机的情况下重新配置在 Kubernetes 中运行的 Ingress?
【发布时间】:2018-09-04 13:34:50
【问题描述】:

我们目前面临以下情况:

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 配置的更改通常会导致负载平衡的一些停机时间?

【问题讨论】:

    标签: kubernetes google-cloud-platform google-kubernetes-engine kubernetes-ingress


    【解决方案1】:

    简短回答:当您更新入口资源时,由于在 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 并可视化经典的“It works!

    只要将入口更改为指向nginx2httpd2

    • ~1分钟继续服务旧服务
    • ~ 1 分钟 /nginx 带你到“Error: Server Error”和/index.htmldefault backend - 404
    • 3 分钟后,我们终于回到了稳定的状态

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      相关资源
      最近更新 更多