
# 登录容器实例
#### 操作场景
如果在使用容器的过程中遇到非预期的问题，您可登录容器进行调试。
#### 约束与限制
- 在CloudShell中使用kubectl时，kubectl的权限由登录用户的权限决定。
- CloudShell暂不支持委托账号。
- 同一用户在使用CloudShell组件连接集群或容器时，限制同时打开的实例上限数量为15个。
- CloudShell中kubectl集群访问凭据有效期为1天，从UCS重新跳转可以重置有效期。
- 当前仅华北-北京四、华南-广州支持使用CloudShell登录容器，具体请以控制台为准。
 
#### 前提条件
- 将线下自有IDC或第三方云厂商的网络环境与华为云VPC打通。
  - 虚拟专用网络（VPN）方案：请参见[通过VPN连接云下数据中心与云上VPC](https://support.huaweicloud.com/bestpractice-vpn/vpn_05_0001.html)。
  
  - 云专线（DC）方案：请参见[用户通过单专线静态路由访问VPC](https://support.huaweicloud.com/bestpractice-dc/dc_05_0001.html)或[用户通过单专线BGP协议访问VPC](https://support.huaweicloud.com/bestpractice-dc/dc_05_0002.html)。
   
- 购买弹性负载均衡（ELB）实例并配置：详情参考[购买独享型负载均衡器](https://support.huaweicloud.com/usermanual-elb/elb_lb_000006.html)，[购买共享型负载均衡器](https://support.huaweicloud.com/usermanual-elb/zh-cn_topic_0015479967.html)。
  - 网络配置：选择用户云上所属VPC。
  
  - 添加监听器：后端服务器选择"IP类型后端"，IP地址填写集群访问地址，可从集群的kubeconfig.yaml文件中的server字段获得。 
    ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002263791258.png "点击放大")
    
   
- 创建终端节点服务：详情参考[创建终端节点服务](https://support.huaweicloud.com/usermanual-vpcep/zh-cn_topic_0131645182.html)。
  - 虚拟私有云：选择用户云上所属VPC，与ELB同一个VPC。
  
  - 连接审批：关闭
  
  - 网络协议/端口：协议：TCP，服务端口：ELB实例的监听端口（ELB添加监听器时的端口，例：5443），终端端口：与集群的kubeconfig.yaml文件中端口一致（例：5443）。 ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002303055745.png "点击放大")
    
  
  - 弹性负载均衡：选择上一步"[购买弹性负载均衡（ELB）实例]"所创建的ELB实例。
  
  - 终端节点服务创建成功后，添加CloudShell登录白名单：白名单id从集群远程登录接入点配置提醒处获取。
  
  
  ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002264234600.png "点击放大")
  ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002298964229.png "点击放大")
  
  
- 集群注册并接入成功。 如果是未加入舰队集群，需要先确认集群已注册并接入网络成功：请参见[注册本地集群](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0284.html)，[附着集群](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0002.html)，[伙伴云集群](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0308.html)。
  
 
 #### 远程登录接入点配置
1. 进入UCS控制台，左侧导航栏选择"容器舰队"。 
   - 如果是未加入舰队集群，直接单击集群名即可进入集群控制台。
   
   - 如果是已加入容器舰队的集群，先进入对应容器舰队控制台，选择左侧 "集群管理"内的"容器集群"，再进入对应集群控制台。
   
   
   
   
2. 进入目标集群的"基本信息"页面，单击基本信息页面的"接入信息"对应的"配置"按钮。 
   - 选择项目：如果开通了IAM项目，还需要选择一个项目。
   
   - 终端节点服务：可选择已有VPC终端节点服务，或者新建VPC终端节点服务。
   
   
   
   
3. 单击"确定"。 
   等待集群接入信息配置成功后，"接入信息"将显示接入终端节点服务的名称，说明集群远程登录接入点已配置成功。
   ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002298006329.png "点击放大")
   
   
 
#### 使用CloudShell登录容器
1. 进入UCS控制台，左侧导航栏选择"容器舰队"。 
   - 如果是未加入舰队集群，直接单击集群名即可进入集群控制台。
   
   - 如果是已加入容器舰队的集群，先进入对应容器舰队控制台，选择左侧 "集群管理"内的"容器集群"，再进入对应集群控制台。
   
   
   
   
2. 在左侧导航栏选择"工作负载"，单击目标工作负载名称，查看工作负载的实例列表。
3. 单击目标实例操作列中的"更多 \> 远程登录"。 
   图1登录容器
   ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002297581705.png "点击放大")
   
   
   ![](https://support.huaweicloud.com/usermanual-ucs/public_sys-resources/note_3.0-zh-cn.png)
   若工作负载所在集群未配置终端节点服务，则工作负载实例操作列的"远程登录"按钮将会是置灰不可点击状态，并提示用户进行[远程登录接入点配置]。
   
   
4. 在弹出窗口中选择要登录的容器以及命令，然后单击"确定"。 
   图2选择登录的容器与命令   
   ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002273521645.png "点击放大")
   
   
   
5. 页面会自动跳转到CloudShell，并初始化启动kubectl，然后自动执行kubectl exec命令登录到容器。 
   ![](https://support.huaweicloud.com/usermanual-ucs/public_sys-resources/note_3.0-zh-cn.png)
   请等待kubectl exec 命令自动执行后再进行后续操作，此命令出现需要一段时间 5-10秒。
   图3CloudShell页面
   ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002297584889.png "点击放大")
   
   
   
 
#### 使用kubectl命令登录容器
1. 使用kubectl连接集群，可参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
2. 执行以下命令，查看已创建的Pod。 
   ```
   kubectl get pod
   ```
   示例输出如下：
   ```
   NAME                               READY   STATUS    RESTARTS       AGE
   nginx-59d89cb66f-mhljr             1/1     Running   0              11m
   ```
   
   
3. 查询该Pod中的容器名称。 
   ```
   kubectl get po nginx-59d89cb66f-mhljr -o jsonpath='{range .spec.containers[*]}{.name}{end}{"\n"}'
   ```
   示例输出如下：
   ```
   container-1
   ```
   
   
4. 执行以下命令，登录到nginx-59d89cb66f-mhljr这个Pod中名为container-1的容器。 
   ```
   kubectl exec -it nginx-59d89cb66f-mhljr -c container-1 -- /bin/sh
   ```
   
   
5. 如需退出容器，可执行**exit**命令。
 
#### 使用CloudShell连接集群
CloudShell中已预装并配置了kubectl工具，且默认连接到对应集群，您可以在CloudShell界面中直接执行kubectl命令，管理集群资源。使用CloudShell连接集群的具体步骤如下：
1. 进入UCS控制台，左侧导航栏选择"容器舰队"。 
   - 如果是未加入舰队集群，直接单击集群名即可进入集群控制台。
   
   - 如果是已加入容器舰队的集群，先进入对应容器舰队控制台，选择左侧 "集群管理"内的"容器集群"，再进入对应集群控制台
   
   
   
   
2. 在集群基本信息页面，单击页面右上角"命令行工具"即可使用CloudShell。 
   图4未加入舰队集群CloudShell
   ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002264356142.png "点击放大")
   
   图5已加入容器舰队的集群CloudShell   
   ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000002264249104.png "点击放大")
   
   
   
3. 进入CloudShell后，执行以下命令，验证CloudShell中的kubectl是否已连接对应集群。 
   ```
   kubectl cluster-info    # 查看集群信息
   ```
   若回显结果如下，则说明CloudShell中的kubectl已连接集群，您可以直接使用kubectl命令管理集群资源。
   ```
   Kubernetes control plane is running at https://xx.xx.xx.xx:5443
   CoreDNS is running at https://xx.xx.xx.xx:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
   To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
   ```
   
   
