如何禁用 kubectl 对 kube apiserver 的不安全批准

如何禁用 kubectl 对 kube apiserver 的不安全批准

我正在尝试使我的主服务器 API 更加安全,以避免允许非 https 请求通过。

配置示例:

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    server: https://ip:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: REDACTED

只要我使用正确的 CA,它就可以起作用。

我的问题是,如果我删除 CA 或我有错误的 CA 并且只需应用标志,它也会起作用--insecure-skip-tls-verify

我如何强制服务器在 Server-API 上允许 https 连接而不是 http 连接?

我也禁用了匿名请求匿名请求但我仍然可以看到请求可以通过。

答案1

我的问题是,如果我删除 CA 或者我有错误的 CA,并且只需应用标志--insecure-skip-tls-verify,它也会起作用。

使用--insecure-skip-tls-verify高度不建议在生产环境中。当你想做一些本地测试或者用于学习目的时可以使用它。

库贝克特您有以下信息:

--insecure-skip-tls-verify

If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure

因此,如果将此标志设置为 true,它将始终跳过证书,并且根本不会检查服务器的身份。它类似于curl -k

-k, --insecure
              (TLS) By default, every SSL connection curl makes is verified to
              The  server  connection  is verified by making sure the server's
              interface name, IP address or host name.

您可以通过多种方式保护集群,但这取决于具体情况。不过,有一些主要方法API 服务器端口和 IP概念:

使用 SecurePort

默认情况下,Kubernetes API 服务器HTTP在 2 个端口上提供服务:

  1. localhost port:
  • 用于测试和引导,以及供主节点(调度程序、控制器管理器)的其他组件与 API 通信
  • 没有 TLS
  • 禁用不安全的 http 连接:默认为端口 8080,通过--insecure-port标志更改。(可以通过 禁用--insecure-port=0
  • 默认 IP 为localhost,用标志更改--insecure-bind-address。(删除--insecure-bind-address
  • 请求绕过身份验证和授权模块。
  • 由准入控制模块处理的请求。
  • 需要有主机访问权限才能受到保护
  1. Secure port:
  • 尽可能使用启用安全端口:
  • 使用 TLS。使用标志设置证书--tls-cert-file和密钥--tls-private-key-file
  • 默认是 port 6443,用 - 标志更改-secure-port
  • 默认IP是第一个non-localhost网络接口,用--bind-address标志改变。
  • 由身份验证和授权模块处理的请求。
  • 由准入控制模块处理的请求。
  • 身份验证和授权模块运行。

限制 API 访问,这意味着您应该只允许从特定 IP 或特定 IP 范围(授权网络)访问您的 API。它不应该从外部访问。为此,您可以使用防火墙规则或网络策略

匿名请求,您已经这样做了。

您可以查看--insecure-port=0,但它应该在较新的版本中被弃用。

作为补充信息,我建议您检查Kubernetes 的艰难之路,特别是其中 3 章: Provisioning Compute Resources,,Provisioning the CA and Generating TLS CertificatesGenerating Kubernetes Configuration Files for Authentication你可以在那里找到一些最佳实践。

非常好的解释,Kube API-server你可以在本文

关于集群安全的有用链接:

保障 Kubernetes 集群安全的基础知识 - 如何保护 kube-apiserver

控制对 Kubernetes API 的访问

Kubernetes 安全最佳实践

Kubernetes 安全 101:风险和 29 个最佳实践

控制对 Kubernetes API 的访问

访问集群

相关内容