Как реализовать поддержку HTTPS для HTTP-сервера Flask, работающего как контейнер Kubernetes - PullRequest
2 голосов
/ 07 июля 2019

HTTP-сервер на основе Python Flask работает в кластере Google Kubernetes как контейнер Docker.Он реализован в виде единого модуля flask-http-deployment и расположен за Load Balancer.

. Код Python HTTP-сервера довольно прост и не поддерживает протокол HTTPS.Но другие приложения должны будут общаться с этим сервером через HTTPS.Поэтому необходимо реализовать поддержку HTTPS.

Из того, что я прочитал (пожалуйста, исправьте меня, если я ошибаюсь), поддержку HTTPS можно реализовать, настроив flask-http-deployment с помощьюsecret.

Вот шаги, которые я выполнил:

  1. Сгенерировал файлы my-cert.crt и my-key.key:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout my-key.key -out my-cert.crt -subj '//CN=mydomain.com'

Имея файлы my-cert.crt и my-key.key, я создал Kubernetes secret:

kubectl create secret tls my-secret --key=my-key.key --cert=y-cert.crt

Как теперь изменить файл yaml flask-http-deploymentс secret Я только что создал?

      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        name: flask-http-deployment
      spec:
        replicas: 5
        minReadySeconds: 10
        strategy:
          type: RollingUpdate
          rollingUpdate:
            maxUnavailable: 1
            maxSurge: 1
        template:
          metadata:
            labels:
              app: flask-http-app
          spec:
            containers:
            - name: flask-http-container
              image: gcr.io/my-project-id/flask-http-container
              ports:
              - containerPort: 80
              imagePullPolicy: IfNotPresent

Вот yaml Load Balancer, на случай, если это необходимо:

  apiVersion: v1
  kind: Service
  metadata:
    name: flask-http-load-balancer
    labels:
      app: flask-http-app
  spec:
    type: LoadBalancer
    ports:
    - port: 80
      nodePort: 30000
      protocol: TCP
      name: flask 
    selector:

Ответы [ 2 ]

3 голосов
/ 07 июля 2019

Я не уверен в секрете, и где вы используете созданный секрет, но поддержка https такая же, как и в традиционном мире, поместите прокси-сервер завершения https перед службой приложения, такой как модуль nginx или входной контроллер nginx (используйте там свой секрет)

или прервите SSL / TLS на внешнем балансировщике нагрузки.

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

Проверьте, что вход nginx позволяет вам прикреплять SSL-сертификаты к вашим модулям.

https://kubernetes.github.io/ingress-nginx/deploy

...