首页 > 解决方案 > Kubernetes 入口更新与部署

问题描述

我们目前正在建立一个 kubernetes 集群来部署我们的生产工作负载(主要是 http rest 服务)。在这个集群中,我们设置了 nginx 入口控制器来将流量从外部世界路由到我们的服务。由于入口控制器将主要用于路径路由,因此我确实有以下问题:

是否可以将流量路由到后端,而无需在入口规范中专门指定后端名称?例如,我有以下入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
        - path: /apple
          backend:
            serviceName: apple-service
            servicePort: 8080

是否有可能将 /apple 请求路由到 apple-service 而没有在 serviceName 中具体指定它?那么 /apple 会自动路由到 apple-service 服务,/orange 会自动路由到 orange 服务而不显式指定后端名称?

如果没有解决方案 1 以便我们可以根据一些约定进行部署,那么现在的问题是如何以自动化方式管理入口。由于服务将由自动化 CI/CD 管道部署,并且随着服务添加到集群中可能会添加新路径,那么 ci/cd 编排器(例如 jenkins)如何在部署应用程序时更新入口路由?这样我们就可以确定,集群不需要人工干预,并且每条路由都与相应的服务一起部署?

我希望所提供的信息足以理解这个问题。非常感谢您的支持。

标签: nginxkuberneteskubernetes-ingressnginx-ingress

解决方案


只需在 ci/cd 管道中执行一个步骤,检查当前入口是什么,以及是否需要更新某种参数。

高阶步骤...

kubectl get ingress example-ingress -o yaml > ex-ingress.yaml

您可以将该输出写入文件并读取、更新、验证等。

然后将其与您的部署一起推送到集群

kubectl replace -f ex-ingress.yaml 

https://kubernetes.io/docs/concepts/services-networking/ingress/


推荐阅读