Kubernetes 入口更新与部署

stg*_*iaf 2 nginx kubernetes kubernetes-ingress nginx-ingress

我们目前正在设置一个 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
Run Code Online (Sandbox Code Playgroud)

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

  • 问题 2

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

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

Dav*_*ton 5

Just have a step in your ci/cd pipeline that checks for what the current ingress is and some kind of param if it needs to be updated.

High level steps...

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

Run Code Online (Sandbox Code Playgroud)

you can write that output to a file and read it, updated it, verify it and so on.

and then push it to the cluster along with your deployment

kubectl replace -f ex-ingress.yaml 
Run Code Online (Sandbox Code Playgroud)

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