跳转到主要内容
SEO Title
Kubernetes API Access Security Hardening 6

3. 保护对 Kubernetes Kubelet 的访问


正如我们在本文前面所讨论的,Kubelet 是运行 Kubernetes 节点的主要组件。 Kubelet 采用 PodSpec 并根据该规范运行节点。 Kubelet 还公开了 HTTP API,可用于控制和配置 Pod 和节点。

限制对节点和 Kubelet API 的直接网络访问


与控制对 API 服务器的直接网络访问类似,限制对 Kubelet 和节点的直接网络访问同样重要。 使用网络防火墙、HTTP 代理和配置来限制对 Kubelet API 和 Node.js 的直接访问。

使用网络策略


NetworkPolicies 可用于隔离 Pod 并控制 Pod 和命名空间之间的流量。 它们允许在 OSI 3 和 4 层上配置网络访问。 安全配置的 NetworkPolicies 应防止在集群中的节点或 Pod 或命名空间之一受到损害时受到枢轴影响。

以下示例策略显示拒绝所有入口流量策略。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
spec:
  podSelector: {}
  policyTypes:
    - Ingress

此外,请检查您可以复制粘贴的此网络策略食谱集合!

启用对 kubelet API 的身份验证


使用 x509 证书进行身份验证


要在 Kubelet 和 kube-apiserver 之间启用 X509 客户端证书身份验证,请使用 --client-ca-file 标志启动 Kubelet 服务器,并使用 --kubelet-client-certificate 和 --kubelet-client-key 标志启动 kube-apiserver。

使用 API 不记名令牌进行身份验证


Kubelet 通过将身份验证委托给外部服务器来支持 API 持有者令牌身份验证。要启用此功能,请使用 --authentication-token-webhook 标志启动 Kubelet。然后,Kubelet 将在 TokenReview 端点作为 https://WebhookServerURL/<TokenReview&gt; 端点查询外部 Webhook 服务器以验证令牌。

禁用匿名访问


与 kube-apiserver 类似,kubelet 也允许匿名访问。要禁用它,请将 kubelet 启动为 $ kublet --anonymous-auth=false。

启用对 kubelet API 的授权


kubelet API 的默认授权模式是 AlwaysAllow,它授权每个传入的请求。 Kubelet 支持通过 webhook 模式对 Webhook 服务器进行授权委托(类似于使用不记名令牌的 kubelet 身份验证)。要配置它,请使用 --authorization-mode=Webhook 和 --kubeconfig 标志启动 Kubelet。配置完成后,Kubelet 将 kube-apiserver 上的 SubjectAccessReview 端点调用为 https://WebhookServerURL/<SubjectAccessReview&gt; 来执行授权检查。

原文:https://goteleport.com/blog/kubernetes-api-access-security/

本文https://jiagoushi.pro/node/1844

Tags