1.10. 启用集群代理附加组件
在某些情况下,受管集群位于防火墙后面,无法由 hub 集群直接访问。要获取访问权限,您可以设置代理附加组件来访问受管集群的 kube-api
服务器,以提供更安全的连接。
需要的访问权限 : Editor
要为 hub 集群和受管集群配置集群代理附加组件,请完成以下步骤:
输入以下命令在 Red Hat Advanced Cluster Management for Kubernetes hub 集群上启用集群代理附加组件,在
multiclusterhub.yaml
文件中添加enableClusterProxyAddon
的值为true
的条目:oc patch -n open-cluster-management multiclusterhub multiclusterhub --type merge -p '{"spec":{"enableClusterProxyAddon":true}}'
如命令所示,此文件位于
open-cluster-management
命名空间中。输入以下命令将集群代理附加组件应用到目标受管集群:
cat <<EOF | oc apply -f - apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: cluster-proxy namespace: <target_managed_cluster> spec: installNamespace: open-cluster-management-agent-addon EOF
使用您要应用集群代理附加组件的受管集群的名称替换
target_managed_cluster
。通过完成以下步骤,配置
kubeconfig
文件以访问受管集群kube-apiserver
:为受管集群提供有效的访问令牌。您可以使用服务帐户对应的令牌,假设默认服务帐户位于 default 命名空间。
-
确保您在使用受管集群的上下文。假设名为
managed-cluster.kubeconfig
的文件是受管集群的kubeconfig
文件。提示: 带有--kubeconfig=managed-cluster.kubeconfig
的命令在受管集群上运行,此流程中的所有命令都应在同一控制台中运行。不要在不同控制台中运行命令。 在服务帐户中添加一个角色,允许它通过运行以下命令来访问 pod:
oc create role -n default test-role --verb=list,get --resource=pods --kubeconfig=managed-cluster.kubeconfig oc create rolebinding -n default test-rolebinding --serviceaccount=default:default --role=test-role --kubeconfig=managed-cluster.kubeconfig
运行以下命令来查找服务帐户令牌的 secret:
oc get secret -n default --kubeconfig=managed-cluster.kubeconfig | grep default-token
运行以下命令复制令牌:
export MANAGED_CLUSTER_TOKEN=$(kubectl --kubeconfig=managed-cluster.kubeconfig -n default get secret <default-token> -o jsonpath={.data.token} | base64 -d)
将
default-token
替换为您的 secret 的名称。
-
确保您在使用受管集群的上下文。假设名为
在 Red Hat Advanced Cluster Management hub 集群中配置
kubeconfig
文件。运行以下命令,在 hub 集群中导出当前的
kubeconfig
文件:oc config view --minify --raw=true > cluster-proxy.kubeconfig
使用编辑器修改
server
文件。本例使用sed
。如果您使用 OSX,运行alias sed=gsed
。export TARGET_MANAGE_CLUSTER=<cluster1> export NEW_SERVER=https://$(oc get route -n open-cluster-management cluster-proxy-addon-user -o=jsonpath='{.spec.host}')/$TARGET_MANAGE_CLUSTER sed -i'' -e '/server:/c\ server: '"$NEW_SERVER"'' cluster-proxy.kubeconfig
使用您要访问的受管集群名称替换
cluster1
。输入以下命令删除原始用户凭证:
sed -i'' -e '/client-certificate-data/d' cluster-proxy.kubeconfig sed -i'' -e '/client-key-data/d' cluster-proxy.kubeconfig sed -i'' -e '/token/d' cluster-proxy.kubeconfig
添加服务帐户的令牌:
sed -i'' -e '$a\ token: '"$MANAGED_CLUSTER_TOKEN"'' cluster-proxy.kubeconfig
运行以下命令,列出目标受管集群的目标命名空间中的所有 pod:
oc get pods --kubeconfig=cluster-proxy.kubeconfig -n <default>
将
default
命名空间替换为您要使用的命名空间。
您的 hub 集群现在与受管集群 的 kube-api
通信。