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

时间:2019-07-07 18:18:54

标签: python https kubernetes google-cloud-platform google-cloud-pubsub

基于Python的Flask HTTP服务器在Google Kubernetes集群上作为Docker容器运行。它被实现为单个容器flask-http-deployment,并放置在Load Balancer后面。

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

根据我的读物(如果我错了,请纠正我),可以通过将HTTPS配置为flask-http-deployment来实现secret支持。

这是我遵循的步骤:

  1. 生成了my-cert.crtmy-key.key文件:

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

  1. 使用my-cert.crtmy-key.key文件,我创建了Kubernetes secret

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

现在如何使用刚刚创建的flask-http-deployment来修改secret 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

如果需要,这里是Load Balancer 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:

2 个答案:

答案 0 :(得分:3)

我不确定这个秘密,您在哪里使用创建的秘密,但是支持https与传统世界一样,请将https终止代理放在您的应用程序服务(例如nginx pod)前面或Nginx入口控制器(在其中使用您的秘密)

或在您的外部负载均衡器中终止SSL / TLS。

答案 1 :(得分:0)

检出nginx入口可让您将SSL证书附加到Pod。

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