Как настроить https на голом металле kubernetes, используя входной контроллер traefik - PullRequest
0 голосов
/ 06 июля 2019

Я использую кластер kubernetes, который состоит из трех узлов и прекрасно работает, но пришло время сделать мое веб-приложение безопасным, поэтому я развернул входной контроллер (traefik). Но я не смог найти инструкции по настройке https на нем. Я знаю большинство вещей, которые мне придется сделать, например, настроить «секрет» (контейнер с сертификатами) и т. Д., Но мне было интересно, как настроить мой входной контроллер и все файлы, связанные с ним, чтобы я мог использовать безопасное соединение

Я уже настроил входной контроллер и создал несколько внешних и внутренних интерфейсов. Также я настроил сервер nginx (на самом деле это запущенное веб-приложение) для работы на 443 порту


Развертывание моего веб-приложения

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nginx
  replicas: 3 # tells deployment to run 3 pods matching the template
  template: # create pods using pod definition in this template
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: ilchub/my-nginx
        ports:
        - containerPort: 443
      tolerations:
      - key: "primary"
        operator: Equal
        value: "true"
        effect: "NoSchedule"

Код развертывания входного контроллера Traefik

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: traefik-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress
      terminationGracePeriodSeconds: 60
      containers:
      - image: traefik
        name: traefik-ingress-lb
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: secure
        - name: admin
          containerPort: 8080
        args:
        - --api
        - --kubernetes
        - --logLevel=INFO

Вход для панели управления traefik

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-web-ui
  namespace: kube-system
spec:
  rules:
  - host: cluster.aws.ctrlok.dev
    http:
      paths:
      - path: /
        backend:
          serviceName: traefik-web-ui
          servicePort: web

Внешняя конфигурация, связанная с экспозицией

kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - protocol: TCP
      port: 80
      nodePort: 30036
      name: web
    - protocol: TCP
      port: 443
      nodePort: 30035
      name: secure
    - protocol: TCP
      port: 8080
      nodePort: 30034
      name: admin
  type: NodePort

Что я хочу сделать, так это защитить мое приложение, которое уже запущено. Конечным результатом должна быть веб-страница, работающая через https

1 Ответ

0 голосов
/ 10 июля 2019

На самом деле у вас есть 3 способа настроить Traefik для использования https для связи с бэкэнд-модулями:

  1. Если служебный порт, определенный во входной спецификации, равен 443 (обратите внимание, что вы все еще можете использовать targetPort для использования другого порта в вашем модуле).
  2. Если служебный порт, определенный в спецификации входа, имеет имя, начинающееся с https (например, https-api, https-web или просто https).
  3. Если входная спецификация включает аннотацию ingress.kubernetes.io/protocol: https.

Если какой-либо из этих параметров конфигурации существует, предполагается, что протоколом внутренней связи является TLS, и он будет автоматически подключаться через TLS.

Также к объекту Ingress следует добавить дополнительную аутентификацию аннотации , например:

ingress.kubernetes.io/auth-tls-secret: secret

И, конечно же, добавить сертификат TLS на вход

...