kubernetes pod级TLS终止

eiee3dmh  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(2)|浏览(150)

我正在尝试在pod级别终止tls。ingress(nlb)--> service(clusterip)--> pod
我已经通过添加以下注解使用ssl passthrough设置了ingress

annotations:
  nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
  nginx.ingress.kubernetes.io/ssl-passthrough: "true"
  nginx.ingress.kubernetes.io/ssl-redirect: "true"

在此之后,我不确定在pod需要做什么来终止tls。我找不到任何与此相关的文件。mTLS是唯一的解决方案吗?我只需要为命名空间中运行的2个pod执行tls终止。
我试过下面的配置。它不起作用。我错过什么了吗?
nginx ingress controller:

enabled ssl-passthrough

Ingress注解:

nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"

入口质量标准:

spec:
  rules:
  - host: xyz.test.com
    http:
      paths:
      - backend:
          service:
            name: xyz
            port:
              number: 443
        path: /
        pathType: Prefix

服务-规范中的端口部分:

ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: 1443

应用程序pod中的nginx sidecar容器:ports:-containerPort:1443名称:https协议:TCP

volumeMounts:
        - name: secret
          mountPath: /etc/nginx/ssl
          readOnly: true

  volumes:
  - name: secret
    secret:
      secretName: xyz-tls

我可以exec到pod中,看到证书和密钥文件存在于/etc/nginx/ssl中
我还更新了/etc/nginx/conf. d,其中包含以下更改:

server {
  listen 1443 default_server ssl;
  listen [::]:1443 default_server ipv6only=on;
  ssl_certificate /etc/nginx/ssl/tls.crt;
  ssl_certificate_key /etc/nginx/ssl/tls.key;
.....
dl5txlt9

dl5txlt91#

我的建议是:不要这样做!你不想在你的pod里处理证书。在负载均衡器上完成TLS,由云提供商管理,或在集群中由cert-manager和适当的证书提供商(如Let's Encrypt)管理
如果你真的想在你的pod中终止TLS,那么就使用TCP作为协议,这将允许加密的消息通过。

cotxawn7

cotxawn72#

如果您将cert-manager证书与受信任的CA一起使用,则只需要相应密钥中的tls.crtlts.key数据即可配置终止。
您可以通过两种方式从应用程序pod终止TLS连接:

在应用容器中终止TLS

在应用程序代码中,必须使用上面提到的挂载的证书和密钥对初始化TLS连接。

在应用pod的sidecar容器中终止TLS

这样,您的应用程序代码保持不变。传入的加密数据包进入sidecar并终止TLS,然后解密数据包流到您的应用程序pod。这也提供了与上述选项相同的网络安全级别。您可以使用正确配置了tls密钥对的envoyproxynginx容器。

相关问题