Как настроить Ingress контроллер для Kubernetes, где одна конечная точка для тестовой среды, а другая для производственной среды? - PullRequest
1 голос
/ 07 января 2020

Я настраиваю контроллер Ingress для своего сервиса в deploy.yaml из Kubernetes.

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 так, чтобы трафики c в модулях QA направлялись в конечную точку QA, а трафики Prod 'c направлялись в модули Prod?

Ответы [ 2 ]

2 голосов
/ 07 января 2020

Разделение среды на разные этапы является одним из важных факторов при развертывании приложения в Kuebernetes.

Я бы рекомендовал здесь создать два отдельных входа.

Один для производства, а другой для обеспечения качества. (Если у вас больше среды, вы можете иметь больше). Правила входа будут управляться на основе хоста.

Вход в среду 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 
1 голос
/ 07 января 2020

Я делаю это с помощью рулевых диаграмм

Существует множество образцов и руководств, которые вы можете go просмотреть в первую очередь.

идея в том, что когда вам нужно настроить некоторые вещи в качестве входных переменных, вы можете определить эти значения в 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/

Есть еще один подобный проект namaed kustomize , он был разработан командой Kubernetes, но в настоящее время не так популярен как диаграммы Хелма. Вы также можете посмотреть, если вы заинтересованы.

...