kubernetes ingress 是否有任何版本控制?

Are there any versioning for kubernetes ingress?

我想知道入口配置是否有类似于部署中的版本控制。假设有一个错误的配置我想恢复到以前的配置。 我想了解入口 YAML 配置中的 generation

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/service-match: 'new-nginx: header("foo", /^bar$/)'           #Canary release rule. In this example, the request header is used.
    nginx.ingress.kubernetes.io/service-weight: 'new-nginx: 50,old-nginx: 50'                #The route weight.
  creationTimestamp: null
  generation: 1
  name: nginx-ingress
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/nginx-ingress
spec:
  rules:                                                        ##The Ingress rule.
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: new-nginx
          servicePort: 80
        path: /
      - backend:
          serviceName: old-nginx
          servicePort: 80
        path: /

Kubernetes 本身不提供此功能,Rancher 等管理工具也不提供。

如果你想这样做,你需要一个基础设施即代码工具,比如 Terreform、ansible 等。这些的配置文件可以在 repo 中进行版本控制。

即使没有这些,您也可以独立导出一个 give ingress yaml,并将其提交到一个 repo。

查看解决方案的方式略有不同 - 您可以使用 gitOps。我的意思是,您可以将所有 yaml 放在 git 存储库中,在您的集群上安装 ArgoCD,然后让 ArgoCD 为您进行同步。当您意识到您在 yaml 文件中搞砸了某些东西时,只需恢复 git 存储库中的提交。这样您就可以维护历史并获得优雅的非固执己见的解决方案。