我希望得到一些帮助来解决一个特定的Kubernetes + mTLS问题。
请问如何让Kubernetes liveness probe在安全的https mTLS健康检查端点上工作?
我的应用程序是一个Web应用程序,其中健康检查端点通过特定端口公开,该端口与其他业务端点相同。
根据安全性、审计和合规性审查,我必须通过mTLS保护我的所有端点,即使是简单和无辜的健康检查端点。
根据安全性、审计和合规性审查,我不能暴露任何其他端口,例如在https端口1上执行业务端点,但在http端口2上执行健康。
因此,这是失败的,并将我的应用程序标记为down(因为它是通过简单的http,端点是https)
livenessProbe:
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
为了在测试中确认,我们禁用了https和mTLS,启用了普通的http,一切都工作得很好,但我们根本无法做到这一点。
请问如何解决这个问题?
谢谢你。
7条答案
按热度按时间a2mppw5e1#
你可以尝试改变方案:HTTP转HTTPS?
livenessProbe:httpGet:path:/health端口:8080方案:HTTPS initialDelaySeconds:10 periodSeconds:10
如果scheme字段设置为HTTPS,则kubelet发送HTTPS请求,跳过证书验证。
wtzytmuj2#
您可以使用脚本进行就绪性探测。在该脚本中,您可以在端点上简化cURL,还可以提供所需证书和CA证书。
例如:
我假设证书应该秘密地存储在同一个命名空间中。所以你可以在你的pod中挂载secret having cert,这样你的脚本就可以使用这些路径来访问证书。
ssm49v7z3#
我正在研究解决同样问题的方法。我计划做的是在pod中有一个受信任的证书,而不是使用http探针,使用命令探针,并使用所述证书从pod中 curl 我的healthcheck端点。
p8h8hvxi4#
双向TLS(mTLS)旨在保证两端的真实性,这意味着探测端(kubelet)必须能够访问用于在***运行时***识别自己和其他人的密钥和证书。Kubernetes没有这个内置的,一个众所周知的解决方案是here。如果您不想直接部署此解决方案,那么有许多服务网格解决方案都嵌入了此解决方案。Istio,Nginx Service Mesh,AWS App Mesh...仅举几例。
2sbarzqh5#
1.首先,您能否确认是否有任何操作或端口8080正在使用?(检查部署或pod yaml文件,并确保已引用它)。如果那边什么都没发生你的健康检查就会失败
1.你能把“scheme”部分设置为HTTP吗?HTTP是默认方案,因此它是多余的,除非您想将其更改为HTTPS
voase2hg6#
类似于https://stackoverflow.com/a/67047770/1747983答案,这里是一个完整的YAML示例。
我不知道如何使用变量(不去env)。对于PW、端口和路径来说会很好。
4nkexdtk7#
如果您不想遵循上述方法,则可以在Pod内部打开一个不会通过服务暴露的端口。它将在吊舱内部,并可用于准备或活动目的。微服务现在遵循这些方法。