如何在 Kubernetes 的 HTTP 活性探测中使用基本身份验证?

How to use basic authentication in a HTTP liveness probe in Kubernetes?

我有一个 Docker 容器,它公开了受基本身份验证保护的健康检查。我已阅读有关 liveness probes here 的文档,但我找不到有关如何指定基本身份验证凭据的任何详细信息。 Kubernetes 不支持吗?有什么解决方法吗?

不直接支持经过身份验证的 HTTP 探测。如果您无法公开未经身份验证的健康检查(在集群内部 IP 上),那么我认为您最好的选择是使用带有 ExecAction 的探测器和如下命令:

curl -G --fail --silent --output=/dev/null -u ${AUTH_USER}:${AUTH_PASSWD} localhost:${AUTH_PORT}

请注意,该命令是在经过健康检查的容器内执行的,因此如果它设置为绕过本地主机连接的身份验证,您将需要做一些稍微不同的事情。

现在可以为活性探测添加 headers:

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
    httpHeaders:
      - name: Authorization
        value: Basic aGE6aGE=

可能值得注意的是:

if the browser uses Aladdin as the username and OpenSesame as the password, then the field's value is the base64-encoding of Aladdin:OpenSesame, or QWxhZGRpbjpPcGVuU2VzYW1l. Then the Authorization header will appear as:

Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l

来源:https://en.wikipedia.org/wiki/Basic_access_authentication

您可以在 shell 中使用命令 base64 来创建此字符串:

echo -n "Aladdin:OpenSesame" | base64

我也遇到了这个问题,我用的是Openshift的TCP Socket Checks。您必须提供服务器 运行.

所在的端口
livenessProbe:
  tcpSocket:
    port: 8080
  initialDelaySeconds: 15
  timeoutSeconds: 1

TCP Liveness Probe on kubernetes