我正在尝试使我的主服务器 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 个端口上提供服务:
localhost port:
- 用于测试和引导,以及供主节点(调度程序、控制器管理器)的其他组件与 API 通信
- 没有 TLS
- 禁用不安全的 http 连接:默认为端口 8080,通过
--insecure-port
标志更改。(可以通过 禁用--insecure-port=0
)- 默认 IP 为
localhost
,用标志更改--insecure-bind-address
。(删除--insecure-bind-address
)- 请求绕过身份验证和授权模块。
- 由准入控制模块处理的请求。
- 需要有主机访问权限才能受到保护
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 Certificates
。Generating Kubernetes Configuration Files for Authentication
你可以在那里找到一些最佳实践。
非常好的解释,Kube API-server
你可以在本文
关于集群安全的有用链接:
保障 Kubernetes 集群安全的基础知识 - 如何保护 kube-apiserver