Python 如何为作为Kubernetes容器运行的Flask HTTP服务器实现HTTPS支持

Python 如何为作为Kubernetes容器运行的Flask HTTP服务器实现HTTPS支持,python,https,kubernetes,google-cloud-platform,google-cloud-pubsub,Python,Https,Kubernetes,Google Cloud Platform,Google Cloud Pubsub,一个基于Python的FlaskHTTP服务器作为Docker容器运行在Google Kubernetes集群上。它被实现为一个单独的podflask http部署,并放置在负载平衡器后面 HTTP服务器的Python代码非常简单,不支持HTTPS协议。但其他应用程序将需要通过HTTPS与此服务器通信。因此需要实现对HTTPS的支持 从我所读到的(如果我错了,请纠正我),HTTPS支持可以通过配置flask http部署和机密来实现 以下是我遵循的步骤: 生成my-cert.crt和my-key

一个基于Python的
Flask
HTTP服务器作为
Docker
容器运行在Google Kubernetes集群上。它被实现为一个单独的pod
flask http部署
,并放置在
负载平衡器
后面

HTTP服务器的Python代码非常简单,不支持
HTTPS
协议。但其他应用程序将需要通过HTTPS与此服务器通信。因此需要实现对
HTTPS
的支持

从我所读到的(如果我错了,请纠正我),
HTTPS
支持可以通过配置
flask http部署
机密来实现

以下是我遵循的步骤:

  • 生成
    my-cert.crt
    my-key.key
    文件:
  • openssl-req-x509-nodes-days 365-newkey rsa:2048-keyout my-key.key-out my-cert.crt-subc'//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

    现在,我应该如何使用我刚刚创建的
    secret
    修改
    flask http部署
    yaml文件

          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,以备需要:

      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:
    

    我不确定这个秘密,你在哪里使用你创建的秘密,但支持https与传统世界一样,在你的应用程序服务前面放置一个https终止代理,如nginx pod或nginx ingress controller(在那里使用你的秘密)


    或者在外部负载平衡器中终止SSL/TLS。

    检查nginx入口允许您将SSL证书附加到POD


    请澄清如何配置负载平衡器,使其终止SSL/TLS。请参阅有关nginx、nginx入口的文档