IBM Cloud Docs
访问 Red Hat OpenShift 集群

访问 Red Hat OpenShift 集群

创建 Red Hat® OpenShift® on IBM Cloud® 集群后,可以通过访问集群开始使用集群。

先决条件

  1. 安装所需的 CLI 工具。 要快速访问集群中的测试功能,还可以使用 IBM Cloud Shell
  2. 创建 Red Hat OpenShift 集群
  3. 如果网络受到公司防火墙的保护,请允许访问 IBM Cloud 和 Red Hat OpenShift on IBM Cloud API 端点和端口。 对于仅启用了私有云服务端点的 VPC 集群,在 使用云服务端点子网配置 VPC VPN 之前,无法测试与集群的连接。
  4. 运行 "ibmcloud oc cluster get -c <cluster_name_or_ID>,检查群集是否处于健康状态。 如果集群未处于正常运行状态,请查看调试集群指南以获取帮助。 例如,如果在受防火墙网关设备保护的帐户中供应集群,那么必须配置防火墙设置以允许出局流量流至相应的端口和 IP 地址
  5. 查找集群的服务端点。
    • 经典或 VPC 集群: 在上一步的集群详细信息输出中,检查集群的 公共专用服务端点 URL。
    • IBM Cloud Satellite 集群: 继续 访问 Satellite
  6. 如果帐户中的任何用户使用多因子认证 (MFA) (例如 TOTP),请确保 在帐户级别为所有用户启用该认证。 要使用 MFA,必须在帐户级别启用 MFA 以避免认证错误。

通过公共云服务终端访问群集

对于具有公共云服务端点的 Red Hat OpenShift 集群,您可以从控制台或 CLI 登录到集群。

从控制台连接到集群

您可以从控制台快速访问 Red Hat OpenShift on IBM Cloud 集群。

  1. Red Hat OpenShift 集群控制台中,单击要访问的集群。
  2. 单击 Red Hat OpenShift Web 控制台
  3. 要继续在命令行中工作,请单击概要文件名称 (例如 IAM#name@email.com),然后单击 复制登录命令。 根据您的集群版本,从命令行登录到集群,如下所示。
    • 版本 4: 单击 显示令牌,复制 oc login 命令,然后将该命令粘贴到命令行中。

出于安全原因,请先从 IBM Cloud 控制台注销,然后在关闭浏览器之前从 Red Hat OpenShift Web 控制台注销。 必须按指定顺序完成两个步骤,才能成功注销 Red Hat OpenShift Web 控制台。

后续步骤?
尝试 通过控制台部署应用程序

从 CLI 连接到集群

通常,您可以使用 Red Hat OpenShift Web 控制台来获取 oc login 令牌以访问集群。 如果您无法或不想打开 Red Hat OpenShift 控制台,请选择以下选项以使用 CLI 登录到 Red Hat OpenShift on IBM Cloud 集群。

从以下选项中选择

  • 以管理员身份登录:
    1. 确保具有 集群的 管理员 平台访问角色
    2. 为集群设置命令行上下文,并为管理员下载 TLS 证书和许可权文件。
      ibmcloud oc cluster config -c <cluster_name_or_ID> --admin
      
  • 使用 API 密钥登录: 请参阅 使用 API 密钥登录到 Red Hat OpenShift
  • 使用 IBM Cloud 密码登录:
    1. 在以下命令的输出中获取集群的 主 URL
      ibmcloud oc cluster get -c <cluster_name_or_ID>
      
    2. 在浏览器中,打开以下 IBM Cloud IAM 验证码 Web 站点。
      https://iam.cloud.ibm.com/identity/passcode
      
    3. 使用 IBMid 登录并复制验证码。
    4. 使用密码登录群集。
      oc login -u passcode -p <iam_passcode> --server=<master_URL>
      

通过私有云服务终端访问群集

允许授权集群用户通过私有云服务端点访问 VPC经典 集群。

要设置 VPN 以从本地机器连接到集群吗? 检出 使用 WireGuard VPN 访问专用集群

通过私有云服务终端访问 VPC 群集

如果授权集群用户位于 IBM Cloud 专用网络中或通过 VPC VPN 连接 连接到专用网络,那么可通过私有云服务端点访问 Red Hat OpenShift 主节点。 但是,通过私有云服务端点与 Kubernetes 主节点进行的通信必须经过 166.X.X.X IP 地址范围,您必须在 VPN 网关和连接设置中配置该 IP 地址范围。

  1. 设置 IBM Cloud VPC VPN 并通过 VPN 连接到专用网络。

    1. 在本地计算机上配置 VPN 网关。 例如,您可以选择在机器上设置 StrongSwan。
    2. 在 VPC 中创建 VPN 网关,并在 VPC VPN 网关与本地 VPN 网关之间创建连接。 在 新建 VPC 的 VPN 连接 部分中,将 166.8.0.0/14 子网添加到 本地子网 字段。 如果您具有多专区集群,请重复此步骤以在具有工作程序节点的每个专区中的子网上配置 VPC 网关。
    3. 验证您是否已通过 IBM Cloud VPC VPN 连接连接到专用网络。
  2. 要登录到集群,请从以下选项中进行选择。

    • 以管理员身份登录:
      1. 确保具有 集群的 管理员 平台访问角色
      2. 为集群设置命令行上下文,并为管理员下载 TLS 证书和许可权文件。
        ibmcloud oc cluster config -c <cluster_name_or_ID> --admin --endpoint private
        
    • 使用 API 密钥登录: 请参阅 使用 API 密钥登录到 Red Hat OpenShift
    • 使用 IBM Cloud 密码登录:
      1. 在以下命令的输出中获取集群的 专用服务端点 URL
        ibmcloud oc cluster get -c <cluster_name_or_ID>
        
      2. 在浏览器中,打开以下 IBM Cloud IAM 验证码 Web 站点。
        https://iam.cloud.ibm.com/identity/passcode
        
      3. 使用 IBMid 登录并复制验证码。
      4. 使用密码登录群集。
        oc login -u passcode -p <iam_passcode> --server=<private_service_endpoint_URL>
        
  3. 通过检查版本,验证 "oc 命令是否能通过私有云服务端点在群集中正常运行。

    oc version
    

    示例输出

    Client Version: 4.5.0-0.okd-2020-09-04-180756
    Server Version: 4.5.35
    Kubernetes Version: v1.18.3+cdb0358
    

通过私有云服务终端访问经典集群

如果授权集群用户位于 IBM Cloud 专用网络中,或者已通过 经典 VPN 连接IBM Cloud Direct Link 连接到专用网络,那么可通过专用云服务端点访问 Red Hat OpenShift 主节点。 不过,通过私有云服务端点与Kubernetes主站的通信必须通过 "166.X.X.X IP 地址范围,而传统 VPN 连接或IBM Cloud Direct Link 均无法路由该 IP 地址范围。 您可以使用私有网络负载平衡器(NLB)为群集用户公开主控器的私有云服务端点。 私有 NLB 将主站的私有云服务端点公开为内部 "10.X.X.X IP 地址范围,用户可通过 VPN 或IBM Cloud Direct Link连接访问。 如果仅启用私有云服务端点,那么可以使用 Red Hat OpenShift Web 控制台来创建私有 NLB。

  1. 登录到 使用公共云服务端点的 Red Hat OpenShift 集群

  2. 获取群集的私有云服务端点 URL 和端口。

    ibmcloud oc cluster get -c <cluster_name_or_ID>
    

    在此示例输出中,私人服务端点 URL 为 "https://c1.private.us-east.containers.cloud.ibm.com:31144

    NAME:                           setest
    ID:                             b8dcc56743394fd19c9f3db7b990e5e3
    State:                          normal
    Status:                         healthy cluster
    Created:                        2019-04-25T16:03:34+0000
    Location:                       wdc04
    Pod Subnet:                     172.30.0.0/16
    Service Subnet:                 172.21.0.0/16
    Master URL:                     https://c1-e.us-east.containers.cloud.ibm.com:31144
    Public Service Endpoint URL:    https://c1-e.us-east.containers.cloud.ibm.com:31144
    Private Service Endpoint URL:   https://c1.private.us-east.containers.cloud.ibm.com:31144
    Master Location:                Washington D.C.
    ...
    
  3. 创建名为 oc-api-via-nlb.yaml 的 YAML 文件。 该 YAML 创建了一个私有 "LoadBalancer 服务,并通过该 NLB 公开私有云服务端点。 将 "<private_service_endpoint_port> 替换为上一步中找到的端口。

    apiVersion: v1
    kind: Service
    metadata:
      name: oc-api-via-nlb
      annotations:
        service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: private
      namespace: default
    spec:
      type: LoadBalancer
      ports:
      - protocol: TCP
        port: <private_service_endpoint_port>
        targetPort: <private_service_endpoint_port>
    ---
    kind: Endpoints
    apiVersion: v1
    metadata:
      name: oc-api-via-nlb
      namespace: default
    subsets:
      - addresses:
          - ip: 172.20.0.1
        ports:
          - port: 2040
    
    
    
  4. 要创建专用 NLB 和端点,请执行以下操作:

    1. 应用先前创建的配置文件。
      oc apply -f oc-api-via-nlb.yaml
      
    2. 验证 oc-api-via-nlb NLB 是否已创建。 在输出中,记下 10.x.x.x EXTERNAL-IP 地址。 此 IP 地址会在 YAML 文件指定的端口上为群集主控暴露私有云服务端点。
      oc get svc -o wide
      
      在此示例输出中,主站私有云服务端点的 IP 地址为 "10.186.92.42
      NAME                     TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE   SELECTOR
      oc-api-via-nlb           LoadBalancer   172.21.150.118   10.186.92.42     443:32235/TCP    10m   <none>
      ...
      
  5. 在您或您的用户运行“oc 命令的客户端计算机上,将 NLB IP 地址和私有云服务端点 URL 添加到”/etc/hosts 文件中。 不要在 IP 地址和 URL 中包含任何端口,也不要在 URL 中包含 "https://

    • 适用于macOS和Linux用户:

      sudo nano /etc/hosts
      
    • 对于 Windows 用户:

      notepad C:\Windows\System32\drivers\etc\hosts
      

      根据本地计算机许可权,您可能需要以管理员身份运行记事本来编辑 hosts 文件。

      要添加的示例文本:

      10.186.92.42      c1.private.us-east.containers.cloud.ibm.com
      
  6. 验证您是否已通过 VPNIBM Cloud Direct Link 连接连接到专用网络。

  7. 通过从下列其中一个选项中进行选择,登录到集群。

    • 以管理员身份登录:
      1. 确保具有 集群的 管理员 平台访问角色
      2. 为集群设置命令行上下文,并为管理员下载 TLS 证书和许可权文件。
        ibmcloud oc cluster config -c <cluster_name_or_ID> --admin --endpoint private
        
    • 使用 API 密钥登录: 请参阅 使用 API 密钥登录到 Red Hat OpenShift
    • 使用 IBM Cloud 密码登录:
      1. 在以下命令的输出中获取集群的 专用服务端点 URL
        ibmcloud oc cluster get -c <cluster_name_or_ID>
        
      2. 在浏览器中,打开以下 IBM Cloud IAM 验证码 Web 站点。
        https://iam.cloud.ibm.com/identity/passcode
        
      3. 使用 IBMid 登录并复制验证码。
      4. 使用密码登录群集。
        oc login -u passcode -p <iam_passcode> --server=<private_service_endpoint_URL>
        
  8. 通过检查版本,验证 "oc 命令是否能通过私有云服务端点在群集中正常运行。

    oc version
    

    示例输出

    Client Version: 4.5.0-0.okd-2020-09-04-180756
    Server Version: 4.5.35
    Kubernetes Version: v1.18.3+cdb0358
    

为私有云服务端点创建允许列表

专用服务端点允许列表已过时,支持将于 2025 年 2 月 10 日结束。 尽快从允许列表迁移到基于上下文的限制。 有关更多信息,请参阅 从专用服务端点允许列表迁移到基于上下文的限制(CBR)

通过创建子网允许列表来控制对私有云服务端点的访问。

通过 IBM Cloud IAM 授予用户对集群的访问权后,可以通过为私有云服务端点创建允许列表来添加辅助安全层。 只允许通过群集的私有云服务端点,向群集主控发送来自允许列表中子网的授权请求。

如果要允许来自不同于集群的 VPC 的请求,那么必须在允许列表中包含该 VPC 的云服务端点。

例如,要访问集群的私有云服务端点,必须通过 VPN 或 IBM Cloud Direct Link连接到 IBM Cloud 经典网络或 VPC 网络。 您可以为 VPN 或 Direct Link 隧道添加子网,以便只有组织中的授权用户才能从该子网访问私有云服务端点。

私有云服务端点允许列表还可以帮助阻止用户在撤销其授权后访问集群。 当用户离开组织时,您将除去其 IBM Cloud IAM 许可权,这些许可权授予他们对集群的访问权。 但是,用户可能已复制包含功能标识凭证的 API 密钥,这些凭证包含集群所需的 IAM 许可权。 该用户仍可以使用这些凭证和私有云服务端点地址从其他子网 (例如,从其他 IBM Cloud 帐户) 访问集群。 如果在组织的 IBM Cloud 帐户中创建仅包含 VPN 隧道子网的允许列表,那么将拒绝用户尝试从另一个 IBM Cloud 帐户进行访问。

工作程序节点子网将自动添加到允许列表中并从允许列表中除去,以便工作程序节点可以始终通过私有云服务端点访问主节点。

私有云服务终端允许列表仅限于 20 个子网,不久将不支持。 基于上下文的限制规则可替代这种规则,它最多可包含 200 个子网,因此,如果您的允许列表中需要超过 20 个子网,则应使用 从专用服务端点允许列表迁移到基于上下文的限制(CBR)

如果为集群启用了公共云服务端点,那么仍允许通过公共云服务端点进行授权请求。 因此,私有云服务端点允许列表对于控制对仅启用了私有云服务端点的集群的访问最为有效。

开始之前:

要创建私有云服务端点允许列表,请执行以下操作:

  1. 获取要添加到允许列表的子网。 例如,您可以通过 VPN 或 Direct Link 隧道获取连接到 IBM Cloud 专用网络的子网。

  2. 为集群的私有云服务端点启用子网允许列表功能。 现在,对于源自不在允许列表中的子网的任何请求,将阻止通过私有云服务端点访问集群。 工作程序节点将继续运行并有权访问主节点。

    ibmcloud oc cluster master private-service-endpoint allowlist enable --cluster <cluster_name_or_ID>
    
  3. 将授权用户可以从中访问私有云服务端点的子网添加到允许列表。

    ibmcloud oc cluster master private-service-endpoint allowlist add --cluster <cluster_name_or_ID> --subnet <subnet_CIDR> [--subnet <subnet_CIDR> ...]
    
  4. 验证允许列表中的子网是否正确。 允许列表包括手动添加的子网以及由 IBM自动添加和管理的子网,例如工作程序节点子网。

    ibmcloud oc cluster master private-service-endpoint allowlist get --cluster <cluster_name_or_ID>
    

您的授权用户现在可以继续 通过私有云服务端点访问集群

访问 Satellite 上的 Red Hat OpenShift 集群

在 Satellite 位置创建 Red Hat OpenShift 集群 之后,您可以通过访问集群来开始使用集群。

访问集群并运行 oc get nodesoc describe node <worker_node> 命令时,可能会看到为工作程序节点分配了 master,worker 角色。 在 OpenShift Container Platform 集群中,操作程序将主角色用作 nodeSelector,以便 OCP 可以在集群中部署由操作程序 (例如内部注册表) 控制的缺省组件。 您分配给集群的 Satellite 主机仅作为工作程序节点运行,而没有主节点进程 (例如 API 服务器或 Kubernetes 调度程序) 在工作程序节点上运行。

通过集群服务 URL 访问集群

通过其服务 URL 连接到集群。 此 URL 是 Satellite 位置子域和节点端口之一,其格式如 https://p1iuql40jam23qiuxt833-q9err0fiffbsar61e78vv6e7ds8ne1tx-ce00.us-east.satellite.appdomain.cloud:30710

如果位置主机仅具有专用网络连接,或者如果使用 Amazon Web Services,Google Cloud Platform 和 Microsoft Azure 主机,那么必须连接到主机的专用网络 (例如,通过 VPN 访问) 以连接到集群并访问 Red Hat OpenShift Web 控制台。 或者,如果主机具有公用网络连接,那么可以通过将集群的 DNS 记录和位置的 DNS 记录更改为 使用主机的公共 IP 地址 来测试对集群的访问权。

您可以从控制台快速访问 Red Hat OpenShift on IBM Cloud 集群。

  1. Red Hat OpenShift 集群控制台中,单击要访问的集群。
  2. 单击 Red Hat OpenShift Web 控制台
  3. 单击概要文件名称 (例如 IAM#name@email.com),然后单击 复制登录命令
  4. 单击 显示令牌,然后复制 oc login 命令。
  5. 将命令粘贴到命令行中。

出于安全原因,请先从 IBM Cloud 控制台注销,然后在关闭浏览器之前从 Red Hat OpenShift Web 控制台注销。 必须按指定顺序完成两个步骤,才能成功注销 Red Hat OpenShift Web 控制台。

如果您无法或不想打开 Red Hat OpenShift 控制台,请选择以下选项以使用 CLI 登录到 Red Hat OpenShift on IBM Cloud 集群。

从公用网络访问集群

如果主机具有公用网络连接,并且您希望从本地机器访问集群而不连接到主机的专用网络,那么可以选择更新集群的子域和位置的 DNS 记录以使用主机的公共 IP 地址。

对于大多数位置设置,将针对位置的 DNS 记录注册主机的专用 IP 地址,以便仅当您已连接到云提供者的专用网络时才能访问集群。

例如,如果使用 Amazon Web Services,Google Cloud Platform 或 Microsoft Azure 主机,或者如果主机的缺省网络接口为专用,那么只能在专用网络上访问位置的 DNS 记录。

要对集群运行 kubectloc 命令或访问 Red Hat OpenShift Web 控制台,必须连接到主机的专用网络,例如通过 VPN 访问。 但是,如果要从公用网络访问集群 (例如测试从本地机器访问集群),那么可以更改位置和集群子域的 DNS 记录以改为使用主机的公用 IP。

对于生产级工作负载,建议不要使您的位置和集群子域在主机的专用网络外部可供授权集群用户使用。

  1. 查看位置子域,并检查 记录 以获取在该子域的 DNS 中注册的主机的专用 IP 地址。
    ibmcloud sat location dns ls --location <location_name_or_ID>
    
  2. 检索主机的匹配公共 IP 地址。
    ibmcloud sat host ls --location <location_name_or_ID>
    
  3. 使用控制平面中每个主机的公共 IP 地址更新位置子域 DNS 记录。
    ibmcloud sat location dns register --location <location_name_or_ID> --ip <host_IP> --ip <host_IP> --ip <host_IP>
    
  4. 验证是否已向您的位置 DNS 记录注册公共 IP 地址。
    ibmcloud sat location dns ls --location <location_name_or_ID>
    
  5. 获取格式为 <service_name>-<project>.<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud 的集群的 主机名,并记下已自动注册的专用 IP
    ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
    
  6. 将作为工作程序节点分配给此集群的主机的公共 IP 地址添加到集群的子域。 对每个主机的公共 IP 地址重复此命令。
    ibmcloud oc nlb-dns add --ip <public_IP> --cluster <cluster_name_or_ID> --nlb-host <hostname>
    
  7. 从集群的子域中除去专用 IP 地址。 对先前检索的所有专用 IP 地址重复此命令。
    ibmcloud oc nlb-dns rm classic --ip <private_IP> --cluster <cluster_name_or_ID> --nlb-host <hostname>
    
  8. 验证是否已向集群子域注册公共 IP 地址。
    ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
    

通过虚拟专用端点网关访问 VPC 集群

将自动为 VPC 集群创建 虚拟专用端点网关。 如果授权集群用户连接到部署集群的同一 VPC (例如,通过 IBM Cloud VPC VPN),那么可通过此虚拟专用端点网关访问 Kubernetes 主节点。 在这种情况下,将使用虚拟专用端点 (VPE) URL 配置 kubeconfig,该 URL 是专用 DNS 名称,只能由 IBM Cloud VPC 专用 DNS 服务进行解析。 IBM Cloud VPC 专用 DNS 服务器地址为 161.26.0.7161.26.0.8

对于运行 V 4.13的集群: 如果在集群创建期间仅启用了私有云服务端点,那么缺省情况下将使用 VPC 的虚拟专用端点来访问 Red Hat OpenShift 组件,例如 Red Hat OpenShift Web 控制台或 OperatorHub。 您必须连接到专用 VPC 网络 (例如,通过 VPN 连接),才能访问这些组件或在集群上运行 kubectl 命令。 请注意,要通过 VPE 访问控制台,您必须能够访问需要公共连接的 cloud.ibm.com

  1. 设置 IBM Cloud VPC VPN 并通过 VPN 连接到 VPC。

    1. 客户机到站点站点到站点 VPN 配置到 VPC。 例如,您可以选择设置与 VPN 客户端的客户机到站点连接。
    2. 对于客户机到站点 VPN 设置,在供应 VPN 服务器时,必须指定 IBM Cloud VPC 专用 DNS 服务地址,如 注意事项 中所述。 在供应 VPN 服务器后,还必须使用目标 161.26.0.0/16 和操作 translate 创建 VPN 路由。
    3. 对于站点到站点 VPN 设置,必须遵循 通过 VPN 指南访问服务端点,并配置 IBM Cloud VPC 专用 DNS 服务地址。
    4. 验证您是否已通过 IBM Cloud VPC VPN 连接连接到 VPC。
  2. 要登录到集群,请从以下选项中进行选择。

    • 以管理员身份登录:
      1. 确保具有 集群的 管理员 平台访问角色
      2. 为集群设置命令行上下文,并为管理员下载 TLS 证书和许可权文件。
        ibmcloud oc cluster config -c <cluster_name_or_ID> --admin --endpoint vpe
        
    • 使用 API 密钥登录: 请参阅 使用 API 密钥登录到 Red Hat OpenShift
    • 使用 IBM Cloud 密码登录:
      1. 在以下命令的输出中获取 VPE 地址和主 URL
        ibmcloud oc cluster get -c <cluster_name_or_ID>
        
      2. 在浏览器中,打开以下 IBM Cloud IAM 验证码 Web 站点。
        https://iam.cloud.ibm.com/identity/passcode
        
      3. 使用 IBMid 登录并复制验证码。
      4. 使用密码登录群集。
        oc login -u passcode -p <iam_passcode> --server=https://<VPE_URL>:<port_from_the_master_URL>
        
        登录过程将通知由未知机构签署的证书,因为它是由 IBM生成的自签名证书。
  3. 通过检查版本,验证 "oc 命令是否能通过私有云服务端点在群集中正常运行。

    oc version
    

    示例输出

    Client Version: 4.5.0-0.okd-2020-09-04-180756
    Server Version: 4.5.35
    Kubernetes Version: v1.18.3+cdb0358
    

使用 API 密钥从自动化工具访问群集

Red Hat OpenShift on IBM Cloud 与 IBM Cloud Identity and Access Management (IAM) 集成。 通过 IAM,您可以使用其 IAM 身份对用户和服务进行认证,并通过访问角色和策略来授权操作。 当你通过Red Hat OpenShift控制台进行用户身份验证时,你的 IAM 身份会被用来生成Red Hat OpenShift登录令牌,你可以用它登录到命令行。 通过创建 IAM API 密钥或服务标识以用于 oc login 命令,可以自动登录到集群。

使用 API 密钥登录群集

您可以创建一个IBM CloudIAM API 密钥,然后使用该 API 密钥登录Red Hat OpenShift群集。 通过 API 密钥,可以使用一个用户或共享帐户的凭证来访问集群,而不必分别进行登录。 您还可以为服务标识创建 API 密钥。 有关更多信息,请参阅了解 API 密钥

  1. 创建 IBM Cloud API 密钥。 请将 API 密钥保存在安全位置。 您无法再次获取 API 密钥。 如果要将输出导出到本地计算机上的文件,请加入 "--file <path>/<file_name> 选项。

    ibmcloud iam api-key-create <name>
    
  2. 配置集群以将 API 密钥用户添加到集群 RBAC 策略,并将会话上下文设置为集群服务器。

    1. 使用 API 密钥凭证登录到 IBM Cloud。
      ibmcloud login --apikey <API_key>
      
    2. 将集群的 kubeconfig 配置文件下载并添加到 ~/.kube/config 中的现有 kubeconfigKUBECONFIG 环境变量中的最后一个文件。 : 如果您已启用私有云服务端点并希望将其用于集群上下文,请包含 --endpoint private 选项。 要使用私有云服务端点连接到集群,您必须位于 IBM Cloud 专用网络中,或者通过 VPC VPN 连接 连接到专用网络,或者对于经典基础结构,经典 VPN 连接IBM Cloud Direct Link
      ibmcloud oc cluster config -c <cluster_name_or_ID> [--endpoint private]
      
  3. 将 IBM Cloud IAM API 密钥凭证交换为 Red Hat OpenShift 访问令牌。 您可以从 CLI 或 API 登录。 有关更多信息,请参阅 Red Hat OpenShift 文档

    使用 oc CLI 登录: 使用 "oc login 命令登录群集。 用户名(-u)是 "apikey,密码("-p)是您的IBM CloudIAM API 密钥值。IAM API 密钥值。 要使用私有云服务端点,请包含 --server=<private_service_endpoint> 选项。

    oc login -u apikey -p <API_key> [--server=<private_service_endpoint>]
    

    通过运行 Red Hat OpenShift API 请求直接针对集群登录: 使用 API (例如,通过 curl 请求) 登录到集群。

    1. 获取集群的 主 URL

      ibmcloud oc cluster get -c <cluster_name_or_ID>
      

      示例输出

      NAME:                           mycluster
      ID:                             1234567
      State:                          normal
      Created:                        2020-01-22T19:22:16+0000
      Location:                       dal10
      Master URL:                     https://c100-e.<region>.containers.cloud.ibm.com:<port>
      ...
      
      
    2. 获取 Red Hat OpenShift oauth 服务器的令牌端点。

      curl <master_URL>/.well-known/oauth-authorization-server | jq -r .token_endpoint
      

      示例输出

      <token_endpoint>/oauth/token
      

      : 屏幕}

    3. 使用先前检索到的端点登录到集群。 将 <URL> 替换为 oauth 服务器的 <token_endpoint>

      示例 curl 请求:

      curl -u 'apikey:<API_key>' -H "X-CSRF-Token: a" '<URL>/oauth/authorize?client_id=openshift-challenging-client&response_type=token' -vvv
      
    4. Location 响应中,查找 access_token,如以下示例中所示。

      < HTTP/1.1 302 Found
      < Cache-Control: no-cache, no-store, max-age=0, must-revalidate
      < Cache-Control: no-cache, no-store, max-age=0, must-revalidate
      < Expires: 0
      < Expires: Fri, 01 Jan 1990 00:00:00 GMT
      < Location: <token_endpoint>/oauth/token/implicit#access_token=<access_token>&expires_in=86400&scope=user%3Afull&token_type=Bearer
      ...
      
    5. 使用集群主 URL 和访问令牌来访问 Red Hat OpenShift API,例如列出集群中的所有 pod。 有关更多信息,请参阅 Red Hat OpenShift API 文档

      示例 curl 请求:

      curl -H "Authorization: Bearer <access_token>" '<master_URL>/api/v1/pods'
      

使用服务 ID 登录群集

您可以创建一个“IBM CloudIAM 服务 ID,为该服务 ID 创建一个 API 密钥,然后使用该 API 密钥登录到”Red Hat OpenShift群集。 可以使用服务标识,以便其他集群或云中托管的应用程序可以访问您集群的服务。 由于服务标识不会绑定到特定用户,因此如果单个用户离开您的帐户,应用程序仍可以认证服务标识。 有关更多信息,请参阅创建和使用服务标识

  1. 为集群创建 IBM Cloud IAM 服务标识,此标识用于 IAM 策略和 API 密钥凭证。 请确保为服务标识提供描述,以帮助您日后检索服务标识,例如包含集群名称。

    ibmcloud iam service-id-create <cluster_name>-id --description "Service ID for Red Hat OpenShift on IBM Cloud cluster <cluster_name>"
    

    示例输出

    NAME          <cluster_name>-id
    Description   Service ID for Red Hat OpenShift on IBM Cloud cluster <cluster_name>
    CRN           crn:v1:bluemix:public:iam-identity::a/1aa111aa1a11111aaa1a1111aa1aa111::serviceid:ServiceId-bbb2b2b2-2bb2-2222-b222-b2b2b2222b22
    Bound To      crn:v1:bluemix:public:::a/1aa111aa1a11111aaa1a1111aa1aa111:::
    Version       1-c3c333333333ccccc33333c33cc3cc33
    Locked        false
    UUID          ServiceId-bbb2b2b2-2bb2-2222-b222-b2b2b2222b22
    
  2. 为集群服务标识创建定制 IBM Cloud IAM 策略,以授予对 Red Hat OpenShift on IBM Cloud 的访问权。

    ibmcloud iam service-policy-create <cluster_service_ID> --service-name containers-kubernetes --roles <service_access_role> --service-instance <cluster_ID>
    
    了解此命令的组成部分
    参数 描述
    <cluster_service_ID> 必需。 输入您之前为Red Hat OpenShift群集创建的服务 ID。
    --service-name containers-kubernetes 必需。 输入 containers-kubernetes,以便 IAM 策略用于 Red Hat OpenShift on IBM Cloud 集群。
    --roles <service_access_role> 必需。 输入您希望服务 ID 对Red Hat OpenShift集群拥有的访问角色。 平台访问角色 允许群集管理活动,如创建工作节点。 服务访问角色 对应于允许Red Hat OpenShift在群集内开展管理活动的 RBAC 角色,例如用于 Pod 和命名空间等Kubernetes资源的角色。 对于多个角色,请使用逗号分隔的列表。 可能的值有 "Administrator、"Operator、"Editor"和 "Viewer"(平台访问角色);以及 "Reader、"Writer 和 "Manager(服务访问角色)。
    --service-instance <cluster_ID> 要将策略的作用对象限制为特定集群,请输入该集群的标识。 要获取集群标识,请运行 ibmcloud oc clusters。 如果不包含服务实例,访问策略会授予服务 ID 对所有集群、Kubernetes和Red Hat OpenShift访问权限。 此外,还可以将访问策略的作用域限定为某个区域 (--region) 或资源组 (--resource-group-name)。
  3. 为服务标识创建 API 密钥。 将 API 密钥命名为与服务 ID 相似的名称,并包含之前创建的服务 ID "<cluster_name>-id。 请确保为 API 密钥提供描述,以帮助您日后检索该密钥。 请将 API 密钥保存在安全位置。 您无法再次获取 API 密钥。 如果要将输出导出到本地计算机上的文件,请加入 "--file <path>/<file_name> 选项。

    ibmcloud iam service-api-key-create <cluster_name>-key <service_ID> --description "API key for service ID <service_ID> in Red Hat OpenShift cluster <cluster_name>"
    

    示例输出

    Please preserve the API key! It can't be retrieved after it's created.
    
    Name          <cluster_name>-key
    Description   API key for service ID <service_ID> in Red Hat OpenShift cluster <cluster_name>
    Bound To      crn:v1:bluemix:public:iam-identity::a/1bb222bb2b33333ddd3d3333ee4ee444::serviceid:ServiceId-ff55555f-5fff-6666-g6g6-777777h7h7hh
    Created At    2019-02-01T19:06+0000
    API Key       i-8i88ii8jjjj9jjj99kkkkkkkkk_k9-llllll11mmm1
    Locked        false
    UUID          ApiKey-222nn2n2-o3o3-3o3o-4p44-oo444o44o4o4
    
  4. 配置集群以将服务标识用户添加到集群 RBAC 策略,并将会话上下文设置为集群服务器。

    1. 使用服务标识的 API 密钥凭证登录到 IBM Cloud。

      ibmcloud login --apikey <API_key>
      
    2. 将集群的 kubeconfig 配置文件下载并添加到 ~/.kube/config 中的现有 kubeconfigKUBECONFIG 环境变量中的最后一个文件。 : 如果您已启用私有云服务端点并希望将其用于集群上下文,请包含 --endpoint private 选项。 要使用私有云服务端点连接到集群,您必须位于 IBM Cloud 专用网络中,或者通过 VPC VPN 连接 连接到专用网络,或者对于经典基础结构,经典 VPN 连接IBM Cloud Direct Link

      ibmcloud oc cluster config -c <cluster_name_or_ID> [--endpoint private]
      
  5. 使用服务 ID 的 API 密钥登录Red Hat OpenShift集群。 用户名(-u)是 "apikey,密码(-p)是您的 API 密钥值。 要使用私有云服务端点,请包含 --server=<private_service_endpoint> 选项。

    oc login -u apikey -p <API_key> [--server=<private_service_endpoint>]
    
  6. 验证服务标识是否可以执行您授权的操作。

    示例:如果分配了 "Reader 服务访问角色,则该服务 ID 可以列出Red Hat OpenShift项目中的 pod。

    oc get pods
    

    示例:如果分配了 "Manager 服务访问角色,则服务 ID 可以列出Red Hat OpenShift集群中的用户。 IAM 服务标识位于 Identities 输出中。 其他各个用户可能通过其电子邮件地址和 IBM 标识进行识别。

    oc get users
    

    示例输出

    NAME                           UID                                    FULL NAME   IDENTITIES
    IAM#                           dd44ddddd-d4dd-44d4-4d44-4d44d444d444              IAM:iam-ServiceId-bbb2b2b2-2bb2-2222-b222-b2b2b2222b22
    IAM#first.last@email.com       55555ee5-e555-55e5-e5e5-555555ee55ee               IAM:IBMid-666666FFF6