0

我需要一些帮助来解决特定的 Kubernetes + mTLS 问题。

请问如何使 Kubernetes 活跃度探测在安全的 https mTLS 健康检查端点上工作?

我的应用程序是一个 Web 应用程序,其中健康检查端点通过特定端口公开,与其他业务端点相同的端口。

根据安全性、审计和合规性审查,我必须通过 mTLS 保护我的所有端点,即使是简单而无害的健康检查端点。

根据安全、审计和合规审查,我不能公开任何其他端口,比如在 https 端口 1 上做我的业务端点,但在 http 端口 2 上做健康。

因此,这是失败并将我的应用程序标记为关闭(因为它通过简单的 http,端点是 https)

          livenessProbe:
            httpGet:
              path: /health
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10

只是为了在测试期间确认,我们禁用了 https 和 mTLS,启用了普通的旧 http,一切都运行良好,但我们根本无法做到这一点。

请问如何解决这个问题?

谢谢你。

4

6 回答 6

3

您可以尝试更改方案:HTTP 到 HTTPS 吗?

livenessProbe: httpGet: path: /health port: 8080 scheme: HTTPS initialDelaySeconds: 10 periodSeconds: 10

如果 scheme 字段设置为 HTTPS,kubelet 发送 HTTPS 请求跳过证书验证。

于 2021-04-12T10:37:10.157 回答
1

我正在研究相同问题的解决方案。我打算做的是在 pod 内拥有一个受信任的证书,而不是使用 http 探针,而是使用命令探针并使用所述证书从 pod 内部卷曲我的健康检查端点。

于 2021-04-10T22:55:01.527 回答
1

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

例如:

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

我假设证书应该秘密存储在同一个命名空间中。因此,您可以在 pod 中挂载具有证书的秘密,以便您的脚本可以使用这些路径来访问证书。

于 2021-04-11T16:55:12.633 回答
0
  1. 首先,您能否确认是否有任何操作或8080端口正在使用中?(检查部署或 pod yaml 文件并确保您已引用它)。如果那里没有任何事情发生,您的健康检查将失败
  2. 您可以删除设置为 HTTP 的“方案”部分吗?HTTP 是默认方案,因此它是多余的,除非您想将其更改为 HTTPS
  3. path: /health 需要有效,确保它存在于应用程序中。
于 2021-08-23T03:41:00.383 回答
0

相互 TLS (mTLS) 旨在保证两端的真实性,这意味着探测端 (kubelet) 必须有权访问它用于在运行时识别自己以及其他人的密钥和证书。Kubernetes 没有这个内置的,这里有一个众所周知的解决方案。如果您不想直接部署该解决方案,则有许多嵌入该解决方案的服务网格解决方案。Istio、Nginx Service Mesh、AWS App Mesh……仅举几例。

于 2021-08-23T02:45:17.317 回答
-1

如果您不想遵循上述方法,则可以在 pod 内打开一个不会通过服务公开的端口。它将在 pod 内部,可用于准备就绪或活跃性目的。微服务现在遵循这些方法。

于 2021-04-12T07:50:01.143 回答