1

我正在 Kubernetes 的 deployment.yaml 中为我的服务设置 Ingress 控制器。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {env}
  annotations:
    traefik.ingress.kubernetes.io/frontend-entry-points: "http,https"
    ingress.kubernetes.io/force-hsts: "true"
    traefik.ingress.kubernetes.io/redirect-regex: ^http://(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://$1
    kubernetes.io/ingress.class: "traefik"

spec:
  rules:
    - host: “qa.mywebsite.com"
      http:
        paths:
          - backend:
              serviceName: serviceName-{env}
              servicePort:8080

如何设置 Ingress 控制器,以便 QA pod 中的流量路由到 QA 端点,Prod prods 的流量路由到 Prod pod?

4

2 回答 2

2

不同阶段的环境分离是在 Kuebernetes 中部署应用程序的重要因素之一。

我建议在这里创建两个单独的入口。

一个用于生产,另一个用于 QA。(如果你有更多的环境,你可以有更多)。入口规则将根据主机进行控制。

QA 环境入口可能是这样的。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {env}
  annotations:
    traefik.ingress.kubernetes.io/frontend-entry-points: "http,https"
    ingress.kubernetes.io/force-hsts: "true"
    traefik.ingress.kubernetes.io/redirect-regex: ^http://(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://$1
    kubernetes.io/ingress.class: "traefik"

spec:
  rules:
    - host: “qa.mywebsite.com"
      http:
        paths:
          - backend:
              serviceName: serviceName-{env}
              servicePort:8080

同样,您也可以在生产环境中有另一个入口(这里的主机不同)。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {env}
  annotations:
    traefik.ingress.kubernetes.io/frontend-entry-points: "http,https"
    ingress.kubernetes.io/force-hsts: "true"
    traefik.ingress.kubernetes.io/redirect-regex: ^http://(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://$1
    kubernetes.io/ingress.class: "traefik"

spec:
  rules:
    - host: “prod.mywebsite.com"
      http:
        paths:
          - backend:
              serviceName: serviceName-{env}
              servicePort:8080 
于 2020-01-07T02:18:24.780 回答
1

我用舵图做到这一点

您可以先阅读大量示例和用户指南。

这个想法是,当您需要将某些东西设置为输入变量时,您可以在其values.yaml

所以你的代码将是这样的:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ .Release.env  }}
  annotations:
    traefik.ingress.kubernetes.io/frontend-entry-points: "http,https"
    ingress.kubernetes.io/force-hsts: "true"
    traefik.ingress.kubernetes.io/redirect-regex: ^http://(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://$1
    kubernetes.io/ingress.class: "traefik"

spec:
  rules:
    - host: “qa.mywebsite.com"
      http:
        paths:
          - backend:
              serviceName: serviceName-{{ .Release.env  }}
              servicePort:8080

参考: https ://helm.sh/docs/chart_template_guide/values_files/

还有另一个类似的项目名为kustomize,它是由 Kubernetes 团队开发的,但目前不像 Helm 图表那样流行。有兴趣的也可以看看。

于 2020-01-07T00:13:29.740 回答