【问题标题】:Can I query kube-apiserver from kube-proxy pod?我可以从 kube-proxy pod 查询 kube-apiserver 吗?
【发布时间】:2021-06-12 06:56:59
【问题描述】:

我无法直接访问 kube-apiserver pod,但我可以访问 kube-proxy pod。我可以运行curl https://localhost:6443/healthz 作为kube-apiserver 的健康探测吗?

【问题讨论】:

  • 不,locahost 代表 pod,而不是两个 pod 运行所在的节点

标签: kubernetes kube-proxy kube-apiserver


【解决方案1】:

所有 Pod 都可以访问 API 服务器:这是由挂载在 /var/run/secrets/kubernetes.io/serviceaccount/token 中的服务帐户密钥授予的。

在继续之前,您必须确保允许您的 Pod 访问 API 服务器,因此不会被 NetworkPolicy 阻止:此要求尚未在您的问题中声明,因此并非如此。

所述令牌用于对 API Server 执行操作,例如对受 RBAC 保护的资源执行 CRUD 操作。

如果您只需要检查 API Server 的健康状况,您可以使用在 /var/run/secrets/kubernetes.io/serviceaccount/ca.pem 中挂载的 CA 公共证书和在运行时已在 Pod 中注入的环境变量 KUBERNETES_SERVICE_HOST 来 cURL API Server 指向 API服务器,以及KUBERNETES_SERVICE_PORT,尽管 443 应该是默认值。

示例

# kubectl run -it --image curlimages/curl curl --command -- sh
If you don't see a command prompt, try pressing enter.
/ $ env | grep -i kubernetes
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
/ $ curl --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT/api 
-H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"
{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "172.20.0.2:6443"
    }
  ]
}

【讨论】:

    猜你喜欢
    • 2020-06-16
    • 2017-08-06
    • 1970-01-01
    • 2019-12-19
    • 2015-12-27
    • 2016-10-21
    • 2019-05-08
    • 2020-12-31
    • 2021-07-25
    相关资源
    最近更新 更多