8.6. 配置自定义 PKI
有些平台组件,如 Web 控制台,使用 Routes 进行通信,且必须信任其他组件的证书与其交互。如果您使用的是自定义公钥基础架构 (PKI) ,您必须将其配置为在集群中识别其私有签名的 CA 证书。
您可以使用 Proxy API 添加集群范围的可信 CA 证书。您必须在安装过程中或运行时执行此操作。
在 安装过程 中,配置集群范围的代理。您需要在
install-config.yaml
文件中的additionalTrustBundle
设置中定义私有签名的 CA 证书。安装程序生成名为
user-ca-bundle
的 ConfigMap,其中包含您定义的附加 CA 证书。然后,Cluster Network Operator 会创建trusted-ca-bundle
ConfigMap,将这些内容与 Red Hat Enterprise Linux CoreOS (RHCOS) 信任捆绑包合并,Proxy 对象的trustedCA
字段中也会引用此 ConfigMap。-
在运行时,,修改默认 Proxy 对象使其包含您私有签名的 CA 证书 (集群代理启用工作流程的一部分)。这涉及创建包含集群应信任的私有签名 CA 证书的 ConfigMap,然后使用
trustedCA
引用私有签名证书的 ConfigMap 修改代理服务器资源。
安装程序配置的 additionalTrustBundle
字段和 proxy 资源的 trustedCA
字段被用来管理集群范围信任捆绑包; 在安装时会使用 additionalTrustBundle
,并在运行时使用代理的trustedCA
。
trustedCA
字段是对包含集群组件使用的自定义证书和密钥对的 ConfigMap
的引用。
8.6.1. 在安装过程中配置集群范围的代理 复制链接链接已复制到粘贴板!
生产环境可能会拒绝直接访问互联网,而是提供 HTTP 或 HTTPS 代理。您可以通过在 install-config.yaml
文件中配置代理设置,将新的 OpenShift Container Platform 集群配置为使用代理。
先决条件
您检查了集群需要访问的站点,并确定它们中的任何站点是否需要绕过代理。默认情况下,所有集群出口流量都经过代理,包括对托管云供应商 API 的调用。如果需要,您将在
Proxy 对象的
spec.noProxy
字段中添加站点来绕过代理。注意Proxy
对象status.noProxy
字段使用安装配置中的networking.machineNetwork[].cidr
、networking.clusterNetwork[].cidr
和networking.serviceNetwork[]
字段的值填充。对于在 Amazon Web Services(AWS)、Google Cloud Platform(GCP)、Microsoft Azure 和 Red Hat OpenStack Platform(RHOSP)上安装,
Proxy
对象status.noProxy
字段也会使用实例元数据端点填充(169.254.169.254
)。
流程
编辑
install-config.yaml
文件并添加代理设置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用于创建集群外 HTTP 连接的代理 URL。URL 方案必须是
http
。 - 2
- 用于创建集群外 HTTPS 连接的代理 URL。
- 3
- 要从代理中排除的目标域名、IP 地址或其他网络 CIDR 的逗号分隔列表。在域前面加上
.
以仅匹配子域。例如,.y.com
匹配x.y.com
,但不匹配y.com
。使用*
绕过所有目的地的代理。如果您已将 AmazonEC2
、Elastic Load Balancing
和S3
VPC 端点添加到 VPC 中,您必须将这些端点添加到noProxy
字段。 - 4
- 如果提供,安装程序会在
openshift-config
命名空间中生成名为user-ca-bundle
的配置映射,其包含代理 HTTPS 连接所需的一个或多个额外 CA 证书。然后,Cluster Network Operator 会创建一个trusted-ca-bundle
配置映射,将这些内容与 Red Hat Enterprise Linux CoreOS (RHCOS)信任捆绑包合并,Proxy
对象的trustedCA
字段中也会引用此配置映射。additionalTrustBundle
字段是必需的,除非代理的身份证书由来自 RHCOS 信任捆绑包的颁发机构签名。 - 5
- 可选:决定
Proxy
对象的配置以引用trustedCA
字段中user-ca-bundle
配置映射的策略。允许的值是Proxyonly
和Always
。仅在配置了http/https
代理时,使用Proxyonly
引用user-ca-bundle
配置映射。使用Always
始终引用user-ca-bundle
配置映射。默认值为Proxyonly
。
注意安装程序不支持代理的
readinessEndpoints
字段。注意如果安装程序超时,重启并使用安装程序的
wait-for
命令完成部署。例如:./openshift-install wait-for install-complete --log-level debug
$ ./openshift-install wait-for install-complete --log-level debug
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件并在安装 OpenShift Container Platform 时引用。
安装程序会创建一个名为 cluster 的集群范围代理,该代理 使用
提供的 install-config.yaml
文件中的代理设置。如果没有提供代理设置,仍然会创建一个 cluster
Proxy
对象,但它会有一个空 spec
。
只支持名为 cluster
的 Proxy
对象,且无法创建额外的代理。
8.6.2. 启用集群范围代理 复制链接链接已复制到粘贴板!
Proxy
对象用于管理集群范围出口代理。当在没有配置代理的情况下安装或升级集群时,仍会生成 Proxy
对象,但它有一个空的 spec
。例如:
只支持名为 cluster
的 Proxy
对象,且无法创建额外的代理。
集群管理员可以通过修改这个 cluster
Proxy
对象来配置 OpenShift Container Platform 的代理。
在为集群启用集群范围代理功能并保存 Proxy
对象文件后,Machine Config Operator (MCO) 会重启集群中的所有节点,以便每个节点可以访问集群外的连接。您不需要手动重新引导这些节点。
先决条件
- 集群管理员权限
-
已安装 OpenShift Container Platform
oc
CLI 工具
流程
创建包含代理 HTTPS 连接所需的额外 CA 证书的 ConfigMap。
注意如果代理的身份证书由 Red Hat Enterprise Linux CoreOS (RHCOS) 信任捆绑包的颁发机构签名,您可以跳过这一步。
创建名为
user-ca-bundle.yaml
的文件,并提供 PEM 编码证书的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令从
user-ca-bundle.yaml
文件创建配置映射:oc create -f user-ca-bundle.yaml
$ oc create -f user-ca-bundle.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用
oc edit
命令修改Proxy
对象:oc edit proxy/cluster
$ oc edit proxy/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为代理配置所需的字段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用于创建集群外 HTTP 连接的代理 URL。URL 方案必须是
http
。 - 2
- 用于创建集群外 HTTPS 连接的代理 URL。URL 方案必须是
http
或https
。指定支持 URL 方案的代理的 URL。例如,如果大多数代理被配置为使用https
,则大多数代理都会报告错误,但它们只支持http
。此失败消息可能无法传播到日志,并可能显示为网络连接失败。如果使用侦听来自集群的https
连接的代理,您可能需要配置集群以接受代理使用的 CA 和证书。 - 3
- 要排除代理的目标域名、域、IP 地址(或其他网络 CIDR)和端口号的列表(以逗号分隔)。注意
只有在配置 IPv6 地址时,才支持端口号。配置 IPv4 地址时不支持端口号。
在域前面加
.
来仅匹配子域。例如:.y.com
匹配x.y.com
,但不匹配y.com
。使用*
可对所有目的地绕过所有代理。如果您的
noproxy
字段需要包含域地址,您必须在noproxy
字段中明确指定该 FQDN 或前缀匹配子域。您不能使用封装域的 IP 地址或 CIDR 范围。这是因为集群不会在分配路由连接前等待 DNS 返回 IP 地址,并根据请求明确检查。例如,如果您有一个 CIDR 块值,如10.0.0.0/24
,noproxy
字段和字段尝试访问https://10.0.0.11
,则地址可以成功匹配。但是,尝试访问https://exampleserver.externaldomain.com
(其 A 记录条目为10.0.0.11
)会失败。对于noproxy
字段,还需要额外的.externaldomain.com
值。如果您扩展了未包含在安装配置中
networking.machineNetwork[].cidr
字段定义的计算节点,您必须将它们添加到此列表中,以防止连接问题。如果未设置
httpProxy
或httpsProxy
字段,则此字段将被忽略。 - 4
- 将
httpProxy
和httpsProxy
值写进状态之前,执行就绪度检查时要使用的一个或多个集群外部 URL。 - 5
- 引用
openshift-config
命名空间中的 ConfigMap,其包含代理 HTTPS 连接所需的额外 CA 证书。注意 ConfigMap 必须已经存在,然后才能在这里引用它。此字段是必需的,除非代理的身份证书由来自 RHCOS 信任捆绑包的颁发机构签名。
- 保存文件以使改变生效。
8.6.3. 使用 Operator 进行证书注入 复制链接链接已复制到粘贴板!
在您的自定义 CA 证书通过 ConfigMap 添加到集群中后,Cluster Network Operator 会将用户提供的证书和系统 CA 证书合并到单一捆绑包中,并将合并的捆绑包注入请求信任捆绑包注入的 Operator。
在配置映射中添加 config.openshift.io/inject-trusted-cabundle="true"
标签后,会删除其中的现有数据。Cluster Network Operator 获取配置映射的所有权,并只接受 ca-bundle
作为数据。您必须使用单独的配置映射存储 service-ca.crt
,方法是使用 service.beta.openshift.io/inject-cabundle=true
注解或类似的配置。在同一配置映射中添加 config.openshift.io/inject-trusted-cabundle="true"
标签和 service.beta.openshift.io/inject-cabundle=true
注解可能会导致问题。
Operator 通过创建一个带有以下标签的空 ConfigMap 来请求此注入:
config.openshift.io/inject-trusted-cabundle="true"
config.openshift.io/inject-trusted-cabundle="true"
空 ConfigMap 示例:
- 1
- 指定空 ConfigMap 名称。
Operator 将这个 ConfigMap 挂载到容器的本地信任存储中。
只有在 Red Hat Enterprise Linux CoreOS (RHCOS) 信任捆绑包中没有包括证书时才需要添加可信的 CA 证书。
证书注入不仅限于 Operator。当使用 config.openshift.io/inject-trusted-cabundle=true
标记(label) 创建一个空的 ConfigMap 时,Cluster Network Operator会跨命名空间注入证书 。
ConfigMap 可以驻留在任何命名空间中,但 ConfigMap 必须作为卷挂载到需要自定义 CA 的 Pod 中的每个容器。例如: