IBM Cloud Docs
访问集群

访问集群

创建 IBM Cloud® Kubernetes Service 集群后,可以通过访问集群开始使用集群。

先决条件

  1. 安装所需的 CLI 工具,包括 IBM Cloud CLI,Kubernetes Service 插件 (ibmcloud ks) 和 Kubernetes CLI (kubectl)。要快速访问集群中的测试功能,还可以使用 IBM Cloud Shell
  2. 创建 IBM Cloud Kubernetes Service 集群
  3. 如果网络受到公司防火墙的保护,请允许访问 IBM Cloud 和 IBM Cloud Kubernetes Service API 端点和端口。 对于仅限私有云服务端点的集群,在 配置对云服务端点子网的访问权 之前,无法测试与集群的连接。
  4. 运行 ibmcloud ks cluster get -c <cluster_name_or_ID> 查看群集是否处于健康状态。 如果集群未处于正常运行状态,请查看调试集群指南以获取帮助。 例如,如果在受防火墙网关设备保护的帐户中供应集群,那么必须配置防火墙设置以允许出局流量流至相应的端口和 IP 地址
  5. 在集群的输出中,查看集群的公共私有服务 URL。
  6. 您还可以通过 虚拟专用端点 访问 VPC 集群。

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

要使用集群,请将所创建的集群设置为 CLI 会话运行 kubectl 命令的上下文。

如果您想使用 IBM Cloud 控制台,可以直接从网络浏览器中的 IBM Cloud Shell.

  1. 将所创建的集群设置为此会话的上下文。 每次使用集群时都完成这些配置步骤。
    1. 将集群的 kubeconfig 配置文件下载并添加到 ~/.kube/config 中的现有 kubeconfigKUBECONFIG 环境变量中的最后一个文件。
      ibmcloud ks cluster config -c <cluster_name_or_ID>
      
    2. 验证 kubectl 命令是否正确运行以及 Kubernetes 上下文是否设置为集群。
      kubectl config current-context
      
      示例输出
      <cluster_name>/<cluster_ID>
      
  2. 使用缺省端口 8001 启动 Kubernetes 仪表板。
    1. 使用缺省端口号设置代理。
      kubectl proxy
      
      Starting to serve on 127.0.0.1:8001
      
    2. 在 Web 浏览器中打开以下 URL 以查看 Kubernetes 仪表板。
      http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
      

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

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

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

如果授权群集用户位于 IBM Cloud 专用网络中,或通过 VPC VPN 连接 等方式连接到专用网络,则可通过私有云服务端点访问 Kubernetes 主站。 但是,通过私有云服务端点与 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. 将集群的 kubeconfig 配置文件下载并添加到 ~/.kube/config 中的现有 kubeconfigKUBECONFIG 环境变量中的最后一个文件。

    ibmcloud ks cluster config -c <cluster_name_or_ID> --endpoint private
    
  3. 验证 kubectl 命令是否正确运行以及 Kubernetes 上下文是否设置为集群。

    kubectl config current-context
    

    示例输出

    <cluster_name>/<cluster_ID>
    

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

如果经授权的群集用户位于 IBM Cloud 专用网络中,或通过 传统 VPN 连接 等方式连接到专用网络,则可通过私有云服务端点访问 Kubernetes 主站。IBM Cloud Direct Link. 但是,通过私有云服务端点与 Kubernetes 主站的通信必须通过 166.X.X.X IP 地址范围,而传统 VPN 连接或 IBM Cloud Direct Link 均无法路由该 IP 地址范围。 您可以使用私有网络负载平衡器(NLB)为群集用户公开主控器的私有云服务端点。 私有 NLB 将主站的私有云服务端点公开为内部 10.X.X.X IP 地址范围,用户可通过 VPN 或 IBM Cloud Direct Link 连接访问。 如果只启用私有云服务端点,可以使用 Kubernetes 控制面板或临时启用公共云服务端点来创建私有 NLB。

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

    ibmcloud ks cluster get -c <cluster_name_or_ID>
    

    在此输出示例中,Private Service Endpoint URLhttps://c1.private.us-east.containers.cloud.ibm.com:25073

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

    apiVersion: v1
    kind: Service
    metadata:
      name: kube-api-via-nlb
      annotations:
        service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: private
      namespace: default
    spec:
      type: LoadBalancer
      ports:
      - protocol: TCP
        port: 8080 # Or, the <private_service_endpoint_port> that you found earlier.
        targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
    ---
    kind: Endpoints
    apiVersion: v1
    metadata:
      name: kube-api-via-nlb
    subsets:
      - addresses:
          - ip: 172.20.0.1
        ports:
          - port: 2040
    
  3. 要创建专用 NLB,必须连接到集群主节点。 由于您还不能通过 VPN 或 IBM Cloud Direct Link 连接私有云服务端点,您必须使用公共云服务端点或 Kubernetes 控制面板连接到群集主控器并创建 NLB。

    • 如果只启用了私有云服务端点,则可以使用 Kubernetes 控制面板创建 NLB。 仪表板会自动将所有请求路由至主站的私有云服务端点。

      1. 群集 页面,单击要访问的群集。
      2. 在集群详细信息页面中,单击 Kubernetes 仪表板
      3. 单击 + 创建
      4. 选择通过文件创建,上传 kube-api-via-nlb.yaml 文件,然后单击上传
      5. 概述页面中,验证 kube-api-via-nlb 服务是否已创建。 在外部端点列中,记下 10.x.x.x 地址。 该 IP 地址会暴露 Kubernetes 主站的私有云服务端点,端口在 YAML 文件中指定。
    • 如果您也启用了公共云服务端点,则已经可以访问主站。

      1. 将集群的 kubeconfig 配置文件下载并添加到 ~/.kube/config 中的现有 kubeconfigKUBECONFIG 环境变量中的最后一个文件。
        ibmcloud ks cluster config -c <cluster_name_or_ID>
        
      2. 创建 NLB 和端点。
        kubectl apply -f kube-api-via-nlb.yaml
        
      3. 验证 kube-api-via-nlb NLB 是否已创建。 在输出中,记下 10.x.x.x EXTERNAL-IP 地址。 该 IP 地址会暴露 Kubernetes 主站的私有云服务端点,端口在 YAML 文件中指定。
        kubectl get svc -o wide
        
        在此示例输出中,Kubernetes 主站私有云服务端点的 IP 地址为 10.186.92.42
        NAME                     TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE   SELECTOR
        kube-api-via-nlb         LoadBalancer   172.21.150.118   10.186.92.42     443:32235/TCP    10m   <none>
        ...
        
  4. 在您或您的用户运行 kubectl 命令的客户端计算机上,将 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
      
  5. 验证您是否已通过 VPNIBM Cloud Direct Link 连接连接到专用网络。

  6. 将集群的 kubeconfig 配置文件下载并添加到 ~/.kube/config 中的现有 kubeconfigKUBECONFIG 环境变量中的最后一个文件。

    ibmcloud ks cluster config -c <cluster_name_or_ID> --endpoint private
    
  7. 验证 kubectl 命令是否正确运行以及 Kubernetes 上下文是否设置为集群。

    kubectl config current-context
    

    示例输出

    <cluster_name>/<cluster_ID>
    

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

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

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

    1. 客户机到站点站点到站点 VPN 配置到 VPC。 例如,您可以选择设置与 VPN 客户端的客户机到站点连接。
    2. 对于 IBM Cloud VPC 服务的客户机到站点 VPN,在供应 VPN 服务器时必须指定 IBM Cloud VPC 专用 DNS 服务地址 (如 注意事项 中所述),并且必须在供应具有目标 161.26.0.0/16 和操作 translate 的 VPN 服务器后创建 VPN 路由。
    3. 对于 IBM Cloud VPC 服务的站点间 VPN,请遵循 通过 VPN 指南访问服务端点 并配置 IBM Cloud VPC 专用 DNS 服务地址。
    4. 验证您是否已通过 IBM Cloud VPC VPN 连接连接到 VPC。
  2. 将集群的 kubeconfig 配置文件下载并添加到 ~/.kube/config 中的现有 kubeconfigKUBECONFIG 环境变量中的最后一个文件。

    ibmcloud ks cluster config -c <cluster_name_or_ID> --endpoint vpe
    
  3. 1.30 和更高版本 将安全组规则添加到 VPN 的 kube-vpegw-<clusterID>。 此示例中的远程资源来自 VPN 的客户机 IP CIDR。 您可以通过运行 ibmcloud ks cluster get -c CLUSTER 来查找 VPE 端口。

    ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min 30829  --port-max 30829 --remote 192.168.192.0/22
    
  4. 验证 Kubernetes 上下文是否已设置为集群。

    kubectl config current-context
    

    示例输出

    <cluster_name>/<cluster_ID>
    
    kubectl version
    

    示例输出

    Client Version: v1.25.3
    Kustomize Version: v4.5.7
    Server Version: v1.25.4+IKS
    

使用基于上下文的限制来保护集群

不再支持专用服务端点允许列表。 尽快从专用服务端点允许列表迁移到基于上下文的限制。 有关具体迁移步骤,请参阅 从专用服务端点允许列表迁移到基于上下文的限制(CBR)

使用基于上下文的限制(CBR)规则,控制对公共和专用服务端点的访问。

通过 IBM Cloud IAM 授予用户访问群集的权限 后,您可以为群集的公共和私有服务端点创建 CBR 规则,从而增加第二层安全性。 只允许向群集主控发送来自 CBR 规则中子网的授权请求。

如果要允许来自与群集所在 VPC 不同的 VPC 的请求,则必须在 CBR 规则中包含该 VPC 的云服务端点 IP 地址。

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

公共 CBR 规则(如果群集有公共服务端点)还有助于防止用户在授权被撤销后访问群集。 当用户离开组织时,您将除去其 IBM Cloud IAM 许可权,这些许可权授予他们对集群的访问权。 不过,用户可能复制了某个群集的管理员 kubeconfig 文件,从而获得了访问该群集的权限。 如果公共 CBR 规则只允许从贵组织拥有的已知公共子网访问群集主控器,那么用户试图从另一个公共 IP 地址访问将被阻止。

工作节点子网会自动添加到后端 CBR 实现(但不会从 CBR 规则/区域)中移除,这样工作节点就能始终访问群集主控器,用户也无需特别将这些子网添加到自己的 CBR 规则中。

要了解有关使用 CBR 规则保护群集的更多信息,请参阅 使用基于上下文的限制保护群集资源基于上下文的限制方案示例