安全mTLS健康检查端点上的Kubernetes活动探测

d5vmydt9  于 2023-05-22  发布在  Kubernetes
关注(0)|答案(7)|浏览(162)

我希望得到一些帮助来解决一个特定的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,一切都工作得很好,但我们根本无法做到这一点。
请问如何解决这个问题?
谢谢你。

a2mppw5e

a2mppw5e1#

你可以尝试改变方案:HTTP转HTTPS?
livenessProbe:httpGet:path:/health端口:8080方案:HTTPS initialDelaySeconds:10 periodSeconds:10
如果scheme字段设置为HTTPS,则kubelet发送HTTPS请求,跳过证书验证。

wtzytmuj

wtzytmuj2#

您可以使用脚本进行就绪性探测。在该脚本中,您可以在端点上简化cURL,还可以提供所需证书和CA证书。
例如:

curl -k https://<url>/health -v –key key.pem –cacert ca.pem –cert client.pem

我假设证书应该秘密地存储在同一个命名空间中。所以你可以在你的pod中挂载secret having cert,这样你的脚本就可以使用这些路径来访问证书。

ssm49v7z

ssm49v7z3#

我正在研究解决同样问题的方法。我计划做的是在pod中有一个受信任的证书,而不是使用http探针,使用命令探针,并使用所述证书从pod中 curl 我的healthcheck端点。

p8h8hvxi

p8h8hvxi4#

双向TLS(mTLS)旨在保证两端的真实性,这意味着探测端(kubelet)必须能够访问用于在***运行时***识别自己和其他人的密钥和证书。Kubernetes没有这个内置的,一个众所周知的解决方案是here。如果您不想直接部署此解决方案,那么有许多服务网格解决方案都嵌入了此解决方案。Istio,Nginx Service Mesh,AWS App Mesh...仅举几例。

2sbarzqh

2sbarzqh5#

1.首先,您能否确认是否有任何操作或端口8080正在使用?(检查部署或pod yaml文件,并确保已引用它)。如果那边什么都没发生你的健康检查就会失败
1.你能把“scheme”部分设置为HTTP吗?HTTP是默认方案,因此它是多余的,除非您想将其更改为HTTPS

  1. path:/health必须有效,确保它存在于应用程序中。
voase2hg

voase2hg6#

类似于https://stackoverflow.com/a/67047770/1747983答案,这里是一个完整的YAML示例。
我不知道如何使用变量(不去env)。对于PW、端口和路径来说会很好。

readinessProbe:
          exec:
            command: ["/bin/sh", "-c", "curl -sS -I -k --cert-type P12 --cert /myPath/my-keystore.p12:MyPass123 -f https://localhost:12002/component/info"]
          initialDelaySeconds: 20
          periodSeconds: 5
        livenessProbe:
          exec:
            command: ["/bin/sh", "-c", "curl -sS -I -k --cert-type P12 --cert /myPath/my-keystore.p12:MyPass123 -f https://localhost:12002/component/info"]
          initialDelaySeconds: 20
          periodSeconds: 5
          timeoutSeconds: 5
4nkexdtk

4nkexdtk7#

如果您不想遵循上述方法,则可以在Pod内部打开一个不会通过服务暴露的端口。它将在吊舱内部,并可用于准备或活动目的。微服务现在遵循这些方法。

相关问题