1.10. 启用集群代理附加组件

在某些情况下,受管集群位于防火墙后面,无法由 hub 集群直接访问。要获取访问权限,您可以设置代理附加组件来访问受管集群的 kube-api 服务器,以提供更安全的连接。

需要的访问权限 : Editor

要为 hub 集群和受管集群配置集群代理附加组件,请完成以下步骤:

  1. 输入以下命令在 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 命名空间中。

  2. 输入以下命令将集群代理附加组件应用到目标受管集群:

    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

  3. 通过完成以下步骤,配置 kubeconfig 文件以访问受管集群 kube-apiserver

    1. 为受管集群提供有效的访问令牌。您可以使用服务帐户对应的令牌,假设默认服务帐户位于 default 命名空间。

      1. 确保您在使用受管集群的上下文。假设名为 managed-cluster.kubeconfig 的文件是受管集群的 kubeconfig 文件。提示: 带有 --kubeconfig=managed-cluster.kubeconfig 的命令在受管集群上运行,此流程中的所有命令都应在同一控制台中运行。不要在不同控制台中运行命令。
      2. 在服务帐户中添加一个角色,允许它通过运行以下命令来访问 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
      3. 运行以下命令来查找服务帐户令牌的 secret:

        oc get secret -n default --kubeconfig=managed-cluster.kubeconfig | grep default-token
      4. 运行以下命令复制令牌:

        export MANAGED_CLUSTER_TOKEN=$(kubectl --kubeconfig=managed-cluster.kubeconfig -n default get secret <default-token> -o jsonpath={.data.token} | base64 -d)

        default-token 替换为您的 secret 的名称。

    2. 在 Red Hat Advanced Cluster Management hub 集群中配置 kubeconfig 文件。

      1. 运行以下命令,在 hub 集群中导出当前的 kubeconfig 文件:

        oc config view --minify --raw=true > cluster-proxy.kubeconfig
      2. 使用编辑器修改 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

      3. 输入以下命令删除原始用户凭证:

        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
      4. 添加服务帐户的令牌:

        sed -i'' -e '$a\    token: '"$MANAGED_CLUSTER_TOKEN"'' cluster-proxy.kubeconfig
  4. 运行以下命令,列出目标受管集群的目标命名空间中的所有 pod:

    oc get pods --kubeconfig=cluster-proxy.kubeconfig -n <default>

    default 命名空间替换为您要使用的命名空间。

您的 hub 集群现在与受管集群 的 kube-api 通信。