第 7 章 配置 MicroShift 身份验证和安全性
7.1. 配置自定义证书颁发机构 复制链接链接已复制到粘贴板!
通过将 MicroShift 默认 API 服务器证书替换为证书颁发机构(CA)发布的自定义服务器证书来允许和加密与外部客户端的连接。
7.1.1. 为 MicroShift API 服务器使用自定义证书颁发机构 复制链接链接已复制到粘贴板!
当 MicroShift 启动时,内部 MicroShift 集群证书颁发机构(CA)会发出默认的 API 服务器证书。默认情况下,集群外的客户端无法验证 MicroShift 发布的 API 服务器证书。您可以授予 MicroShift API 服务器和外部客户端之间的安全访问权限和加密连接。将默认证书替换为外部由客户端信任的 CA 发布的自定义服务器证书。
以下步骤演示了在 MicroShift 中自定义 API 服务器证书配置的工作流:
- 将证书和密钥复制到主机操作系统中的首选目录中。确保只有 root 访问权限才能访问这些文件。
通过在 MicroShift
/etc/microshift/config.yaml
配置文件中指定证书名称和新的完全限定域名(FQDN)来更新每个自定义 CA 的 MicroShift 配置。每个证书配置都可以包含以下值:
- 证书文件位置是一个必需的值。
包含 API 服务器 DNS 和 IP 地址或 IP 地址范围的一个通用名称。
提示在大多数情况下,MicroShift 为您的自定义 CA 生成新的
kubeconfig
文件,其中包含您指定的 IP 地址或范围。例外是在为 IP 地址指定通配符时。在这种情况下,MicroShift 会生成一个kubeconfig
文件,其中包含服务器的公共 IP 地址。要使用通配符,您必须使用特定详情更新kubeconfig
文件。- 多个主题备用名称(SAN),其中包含 API 服务器 DNS 和 IP 地址或通配符证书。
- 您可以列出每个证书的额外 DNS 名称。
-
MicroShift 服务重启后,您必须将生成的
kubeconfig
文件复制到客户端。 在客户端系统上配置额外的 CA。例如,您可以更新 Red Hat Enterprise Linux (RHEL)信任存储中的 CA 捆绑包。
重要自定义服务器证书必须针对主机操作系统信任根中配置的 CA 数据进行验证。如需更多信息,请参阅以下文档:
证书和密钥从主机上的指定文件位置读取。您可以从客户端测试和验证配置。
- 如果任何验证失败,MicroShift 会跳过自定义配置,并使用默认证书启动。优先级是继续服务不间断。MicroShift 在服务启动时记录错误。常见错误包括过期的证书、缺失文件或错误的 IP 地址。
- 外部服务器证书不会自动续订。您必须手动轮转外部证书。
7.1.2. 配置自定义证书颁发机构 复制链接链接已复制到粘贴板!
要使用自定义证书颁发机构(CA)配置外部生成的证书和域名,请将它们添加到 MicroShift /etc/microshift/config.yaml
配置文件中。您还必须配置主机操作系统信任 root。
外部生成的 kubeconfig
文件在 /var/lib/microshift/resources/kubeadmin/<hostname>/kubeconfig
目录中创建。如果您需要在外部生成的配置之外使用 localhost
,请在其默认位置保留原始 kubeconfig
文件。localhost
kubeconfig
文件使用自签名证书颁发机构。
先决条件
-
已安装 OpenShift CLI (
oc
)。 - 您可以使用具有集群管理角色的用户访问集群。
- 证书颁发机构已发布自定义证书。
-
MicroShift
/etc/microshift/config.yaml
配置文件存在。
流程
- 复制您要添加到 MicroShift 主机的信任根中的自定义证书。确保证书和私钥只能被 MicroShift 访问。
对于您需要的每个自定义 CA,使用以下示例
将名为Certificates 的
apiServer
部分添加到/etc/microshift/config.yaml
MicroShift 配置文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令重启 MicroShift 以应用证书:
systemctl microshift restart
$ systemctl microshift restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
等待几分钟,让系统重新启动并应用自定义服务器。新的
kubeconfig
文件在/var/lib/microshift/resources/kubeadmin/
目录中生成。 -
将
kubeconfig
文件复制到客户端。如果您为 IP 地址指定了通配符,请更新kubeconfig
以删除服务器的公共 IP 地址,并使用您要使用的特定通配符范围替换该 IP 地址。 在客户端中,执行以下步骤:
运行以下命令指定要使用的
kubeconfig
:export KUBECONFIG=~/custom-kubeconfigs/kubeconfig
$ export KUBECONFIG=~/custom-kubeconfigs/kubeconfig
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 使用复制的
kubeconfig
文件的位置作为路径。
使用以下命令检查是否应用了证书:
oc --certificate-authority ~/certs/ca.ca get node
$ oc --certificate-authority ~/certs/ca.ca get node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
oc get node NAME STATUS ROLES AGE VERSION dhcp-1-235-195.arm.example.com Ready control-plane,master,worker 76m v1.32.3
oc get node NAME STATUS ROLES AGE VERSION dhcp-1-235-195.arm.example.com Ready control-plane,master,worker 76m v1.32.3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将新 CA 文件添加到 $KUBECONFIG 环境变量中:
oc config set clusters.microshift.certificate-authority /tmp/certificate-authority-data-new.crt
$ oc config set clusters.microshift.certificate-authority /tmp/certificate-authority-data-new.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证新的
kubeconfig
文件是否包含新的 CA:oc config view --flatten
$ oc config view --flatten
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 外部生成的
kubeconfig
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 外部生成的
kubeconfig
文件中不存在certificate-authority-data
部分。它通过之前使用的oc config set
命令添加。
运行以下命令,验证自定义 API 服务器证书颁发机构的
主题和签发者
:curl --cacert /tmp/caCert.pem https://${fqdn_name}:6443/healthz -v
$ curl --cacert /tmp/caCert.pem https://${fqdn_name}:6443/healthz -v
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要将生成的
kubeconfig
文件中的certificate-authority-data
替换为新的rootCA
,或者将certificate-authority-data
添加到操作系统的信任根中。不要同时使用这两种方法。在操作系统的信任根中配置额外的 CA。例如,在客户端系统上的 RHEL 客户端信任存储中。系统范围的信任存储。
- 建议使用包含 CA 的配置更新证书捆绑包。
-
如果您不想配置证书捆绑包,也可以使用
oc login localhost:8443 --certificate-authority=/path/to/cert.crt
命令,但这不是首选的方法。
7.1.3. 自定义证书保留名称值 复制链接链接已复制到粘贴板!
以下证书问题会导致 MicroShift 动态忽略证书并记录错误:
- 磁盘中不存在证书文件或不可读。
- 证书不可解析。
-
证书会覆盖
SubjectAlternativeNames
(SAN)字段中的内部证书 IP 地址或 DNS 名称。在配置 SAN 时不要使用保留的名称。
地址 | 类型 | 注释 |
---|---|---|
| DNS | |
| IP 地址 | |
| IP 地址 | 集群网络 |
| IP 地址 | 服务网络 |
169.254.169.2/29 | IP 地址 | br-ex Network |
| DNS | |
| DNS | |
| DNS |
7.1.4. 自定义证书故障排除 复制链接链接已复制到粘贴板!
要排除自定义证书的实施,您可以执行以下步骤。
流程
在 MicroShift 中,确保证书由
kube-apiserver
提供,并通过运行以下命令来验证证书路径是否已附加到 the-tls-sni-cert-key
FLAG 中:journalctl -u microshift -b0 | grep tls-sni-cert-key
$ journalctl -u microshift -b0 | grep tls-sni-cert-key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Jan 24 14:53:00 localhost.localdomain microshift[45313]: kube-apiserver I0124 14:53:00.649099 45313 flags.go:64] FLAG: --tls-sni-cert-key="[/home/eslutsky/dev/certs/server.crt,/home/eslutsky/dev/certs/server.key;/var/lib/microshift/certs/kube-apiserver-external-signer/kube-external-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-external-signer/kube-external-serving/server.key;/var/lib/microshift/certs/kube-apiserver-localhost-signer/kube-apiserver-localhost-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-localhost-signer/kube-apiserver-localhost-serving/server.key;/var/lib/microshift/certs/kube-apiserver-service-network-signer/kube-apiserver-service-network-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-service-network-signer/kube-apiserver-service-network-serving/server.key
Jan 24 14:53:00 localhost.localdomain microshift[45313]: kube-apiserver I0124 14:53:00.649099 45313 flags.go:64] FLAG: --tls-sni-cert-key="[/home/eslutsky/dev/certs/server.crt,/home/eslutsky/dev/certs/server.key;/var/lib/microshift/certs/kube-apiserver-external-signer/kube-external-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-external-signer/kube-external-serving/server.key;/var/lib/microshift/certs/kube-apiserver-localhost-signer/kube-apiserver-localhost-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-localhost-signer/kube-apiserver-localhost-serving/server.key;/var/lib/microshift/certs/kube-apiserver-service-network-signer/kube-apiserver-service-network-serving/server.crt,/var/lib/microshift/certs/kube-apiserver-service-network-signer/kube-apiserver-service-network-serving/server.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在客户端中,运行以下命令来确保
kube-apiserver
提供正确的证书:openssl s_client -connect <SNI_ADDRESS>:6443 -showcerts | openssl x509 -text -noout -in - | grep -C 1 "Alternative\|CN"
$ openssl s_client -connect <SNI_ADDRESS>:6443 -showcerts | openssl x509 -text -noout -in - | grep -C 1 "Alternative\|CN"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.5. 清理和重新创建自定义证书 复制链接链接已复制到粘贴板!
要停止 MicroShift 服务,请清理自定义证书并重新创建自定义证书,请使用以下步骤。
流程
运行以下命令,停止 MicroShift 服务并清理自定义证书:
sudo microshift-cleanup-data --cert
$ sudo microshift-cleanup-data --cert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Stopping MicroShift services Removing MicroShift certificates MicroShift service was stopped Cleanup succeeded
Stopping MicroShift services Removing MicroShift certificates MicroShift service was stopped Cleanup succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令重启 MicroShift 服务以重新创建自定义证书:
sudo systemctl start microshift
$ sudo systemctl start microshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow