第 9 章 在代理环境中创建集群
当 hub 集群通过代理服务器连接时,您可以创建 Red Hat OpenShift Container Platform 集群。
要成功创建集群,则必须满足以下情况之一:
- Red Hat Advanced Cluster Management for Kubernetes 与您要创建的受管集群具有私有网络连接,但 Red Hat Advanced Cluster Management 和受管集群使用代理访问互联网。
- 受管集群位于基础架构供应商上,但防火墙端口启用了从受管集群到 hub 集群的通信。
要创建使用代理配置的集群,请完成以下步骤:
通过在
install-config.yaml
文件中添加以下信息,在 hub 集群上配置集群范围的代理设置:apiVersion: v1 kind: Proxy baseDomain: <domain> proxy: httpProxy: http://<username>:<password>@<proxy.example.com>:<port> httpsProxy: https://<username>:<password>@<proxy.example.com>:<port> noProxy: <wildcard-of-domain>,<provisioning-network/CIDR>,<BMC-address-range/CIDR> additionalTrustBundle: | -----BEGIN CERTIFICATE----- <trusted-ca-cert> -----END CERTIFICATE-----
使用代理服务器的用户名替换
username
。使用密码替换
password
以访问您的代理服务器。将
proxy.example.com
替换为代理服务器的路径。使用与代理服务器的通信端口替换
port
。将
wildcard-of-domain
替换为应当绕过代理的域的条目。使用置备网络的 IP 地址和分配的 IP 地址(以 CIDR 表示)替换
provisioning-network/CIDR
。将
BMC-address-range/CIDR
替换为 BMC 地址和地址数(以 CIDR 表示)。将
trusted-ca-cert
替换为openshift-config
命名空间中的 ConfigMap 中的user-ca-bundle
的内容。additionalTrustBundle
字段是必需的,除非代理的身份证书由 Red Hat Enterprise Linux Core OS 信任捆绑包中的颁发机构签名。如果您使用不要求额外代理配置但需要额外 CA 的 MITM 透明代理网络,您必须提供 MITM CA 证书。添加前面的值后,设置将应用到集群。
- 通过完成创建集群的步骤来置备集群。请参阅创建集群以选择您的供应商。
9.1. 在现有集群中启用集群范围代理
当启用集群范围的代理功能时,您必须使受管集群的组件了解,以便它们可以在代理后工作。若要启用组件,如应用程序管理器,操作器容器集使用以下环境变量进行更新:HTTP_PROXY
、HTTPS_PROXY
、NO_PROXY
。
这些环境变量指定了 pod 将 HTTP
和 HTTPS
流量路由到代理服务器的位置。Operator pod 会自动使用这些环境变量更新,因此独立订阅可以在启用集群范围代理后正常工作。
在现有的受管集群中,订阅控制器
在一个 klusterlet add-on
中运行。在创建容器集时,环境变量不会自动添加。您必须通过修补部署并添加三个环境变量到部署中的每个容器来手动将环境变量添加到现有集群。
完成以下步骤,将环境变量添加到 appmgr
的 klusterlet add-on
中:
输入以下命令来创建 HTTP 代理:
kubectl patch deployment <deployment-name> -p '{"spec":{"template":{"spec":{"containers":[{"env":[{"name":"HTTP_PROXY","value":"'<http-proxy>'"}],"name":"'<container-name>'"}]}}}}'
使用部署的名称替换
deployment-name
。使用您要用于 http 请求的代理服务器的地址替换
http-proxy
。例如:http://192.168.1.1:3128
。将
container-name
替换为容器的名称。输入以下命令来创建 HTTPS 代理:
kubectl patch deployment <deployment-name> -p '{"spec":{"template":{"spec":{"containers":[{"env":[{"name":"HTTPS_PROXY","value":"'<https-proxy>'"}],"name":"'<container-name>'"}]}}}}'
使用部署的名称替换
deployment-name
。使用您要用于 https 请求的代理服务器的地址替换
https-proxy
。例如:http://192.168.1.0:3128
。将
container-name
替换为容器的名称。输入以下命令指定不通过代理的内容:
kubectl patch deployment <deployment-name> -p '{"spec":{"template":{"spec":{"containers":[{"env":[{"name":"NO_PROXY","value":"'<no-proxy>'"}],"name":"'<container-name>'"}]}}}}'
使用部署的名称替换
deployment-name
。使用以逗号分隔的 IP、主机名和域(不通过代理路由流量)列表替换
no-proxy
。例如:.cluster.local,.svc,10.128.0.0/14, example.com
。将
container-name
替换为容器的名称。
提示:对于多个容器,您可以在每个容器上创建并运行类似以下示例的文件:
DEPLOYMENT_NAME="klusterlet-addon-appmgr" CONTAINER_NAME="subscription-controller" HTTP_PROXY="http://192.168.1.1:3128" HTTPS_PROXY="http://192.168.1.0:3128" NO_PROXY=".cluster.local,.svc,10.128.0.0/14, example.com" kubectl patch deployment $DEPLOYMENT_NAME -p '{"spec":{"template":{"spec":{"containers":[{"env":[{"name":"HTTP_PROXY","value":"'$HTTP_PROXY'"}],"name":"'$CONTAINER_NAME'"}]}}}}' kubectl patch deployment $DEPLOYMENT_NAME -p '{"spec":{"template":{"spec":{"containers":[{"env":[{"name":"HTTPS_PROXY","value":"'$HTTPS_PROXY'"}],"name":"'$CONTAINER_NAME'"}]}}}}' kubectl patch deployment $DEPLOYMENT_NAME -p '{"spec":{"template":{"spec":{"containers":[{"env":[{"name":"NO_PROXY","value":"'$NO_PROXY'"}],"name":"'$CONTAINER_NAME'"}]}}}}'
注: 在受管集群中 注册
代理和 工作
代理不支持代理设置,因为它们通过建立 mTLS 连接与 hub 集群上的 apiserver
通信,这无法通过代理。
重要: 全局代理设置不会影响警报转发。要使用集群范围代理为 Red Hat Advanced Cluster Management hub 集群设置警报转发,请参阅 转发警报 以了解更多详细信息。