我正在尝试在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;
.....
2条答案
按热度按时间dl5txlt91#
我的建议是:不要这样做!你不想在你的pod里处理证书。在负载均衡器上完成TLS,由云提供商管理,或在集群中由
cert-manager
和适当的证书提供商(如Let's Encrypt)管理如果你真的想在你的pod中终止TLS,那么就使用TCP作为协议,这将允许加密的消息通过。
cotxawn72#
如果您将cert-manager证书与受信任的CA一起使用,则只需要相应密钥中的
tls.crt
和lts.key
数据即可配置终止。您可以通过两种方式从应用程序pod终止TLS连接:
在应用容器中终止TLS
在应用程序代码中,必须使用上面提到的挂载的证书和密钥对初始化TLS连接。
在应用pod的sidecar容器中终止TLS
这样,您的应用程序代码保持不变。传入的加密数据包进入sidecar并终止TLS,然后解密数据包流到您的应用程序pod。这也提供了与上述选项相同的网络安全级别。您可以使用正确配置了tls密钥对的
envoyproxy
或nginx
容器。