
# 舰队或集群添加权限异常怎么办？
#### 问题描述
在舰队或未加入舰队的集群添加权限过程中，可能会因为集群接入异常而导致添加权限异常。当这种情况发生时，舰队或集群的"添加权限"页面会显示详细的添加权限异常事件。请先排查并修复集群中出现的异常，然后重新添加权限策略。
#### 排查思路
舰队或集群添加权限时出现异常事件的排查思路大致可根据报错信息进行定位，如[表1]所示。
 表1报错信息说明 
| 报错信息                                                                                                                                                                                                                                                                                                                                                                                                   | 说明                                                                                             | 推荐排查项                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|
| ClusterRole failed reason:Get \\"https://kubernetes.default.svc.cluster.local/apis/rbac.authorization.k8s.io/v1/clusterroles/XXXXXXX?timeout=30s\\": Precondition Required" Or Get ClusterRole failed reason:an error on the server (\\"unknown\\") has prevented the request from succeeding (get clusterroles.rbac.authorization.k8s.io | 出现该错误的原因大概率为集群还未接入，接入集群中的proxy-agent运行状态异常，或者网络异常。                                             | - [排查项一：proxy-agent的运行状态]  - [排查项二：集群与UCS网络连接状态]   |
| Unauthorized                                                                                                                                                                                                                                                                                                                                                                                           | 出现该错误的原因可能是多样的，请根据实际状态码进行排查。 例如状态码401表示用户没有访问权限，可能的原因是集群认证信息过期。 | - [排查项三：集群认证信息变化]                                                                                                                                           |
| Get cluster namespace\[x\] failed. Or Reason:namespace "x" not found.                                                                                                                                                                                                                                                                   | 出现该错误的原因是集群内没有对应的命名空间。                                                                         | 在集群下创建对应的命名空间并进行重试操作。 如：**kubectl create namespace** *ns_name* 如果不需要使用该命名空间，该异常事件可以忽略。                                                                                                                                           |
   
 #### 排查项一：proxy-agent的运行状态
![](https://support.huaweicloud.com/ucs_faq/public_sys-resources/notice_3.0-zh-cn.png)
集群从UCS注销后，原有proxy-agent配置文件中包含的认证信息将会失效，请同时删除集群中已部署的proxy-agent实例。如需再次接入UCS，必须重新从UCS控制台下载proxy-agent配置文件进行部署。
1. 登录目标集群Master节点。
2. 查看集群代理部署状态。 
   **kubectl -n kube-system get pod \| grep proxy-agent**
   如果部署成功，预期输出如下：
   ```
   proxy-agent-*** 1/1 Running 0 9s
   ```
   说明proxy-agent部署正常，如proxy-agent没有处于正常Running状态，可以使用**kubectl -n kube-system describe pod proxy-agent-\*\*\*** 查看Pod的告警信息，详细排查思路可参考[proxy-agent部署失败怎么办？](https://support.huaweicloud.com/ucs_faq/ucs_faq_0014.html)。
   ![](https://support.huaweicloud.com/ucs_faq/public_sys-resources/note_3.0-zh-cn.png)
   proxy-agent默认部署两个Pod实例，存在一个Pod正常Running即可使用基本功能，但是高可用性无法保证。
   
   
3. 打印proxy-agent的Pod日志，查看代理程序是否可以连接到UCS。 
   **kubectl -n kube-system logs proxy-agent-\*\*\* \| grep "Start serving"**
   如没有"Start serving"的日志打印但是proxy-agent实例状态正常，则需要继续检查其他排查项。
   
   
 
 #### 排查项二：集群与UCS网络连接状态
**公网接入：**
1. 检查集群是否绑定公网IP或配置公网NAT网关。
2. 检查集群安全组的出方向是否放通。如需对出方向做访问控制，请联系技术支持获取目的地址和端口号。
3. 解决网络问题后，删掉已有的proxy-agent Pod使其重新生成Pod资源，查看新建Pod的日志中是否存在"Start serving"的日志打印。 
   **kubectl -n kube-system logs proxy-agent-\*\*\* \| grep "Start serving"**
   
   
4. 日志正常打印后，刷新UCS控制台页面，查看集群是否正常连接。
**私网接入：**
1. 检查集群安全组的出方向是否放通。如需对出方向做访问控制，请联系技术支持获取目的地址和端口号。
2. 排除集群与UCS和IDC之间的网络连接故障。 
   根据网络连接方式不同，请参考以下文档进行故障排除。
   - 云专线（DC）：请参考[故障排除](https://support.huaweicloud.com/trouble-dc/zh-cn_topic_0167035574.html)。
   
   - 虚拟专用网络（VPN）：请参考[故障排除](https://support.huaweicloud.com/trouble-vpn/vpn_06_0000.html)。
    
   
   
3. 排除集群私网接入的VPCEP故障，VPCEP状态需为"已接受"。如VPCEP被误删除，则需重新创建，请参见[私网接入的集群误删除VPCEP后如何恢复？](https://support.huaweicloud.com/ucs_faq/ucs_faq_0011.html)。
   
   图1VPCEP状态   
   ![](https://support.huaweicloud.com/ucs_faq/zh-cn_image_0000002225222474.png "点击放大")
   
   
4. 解决网络问题后，删掉已有的proxy-agent Pod使其重新生成Pod资源，查看新建Pod的日志中是否存在"Start serving"的日志打印。 
   **kubectl -n kube-system logs proxy-agent-\*\*\* \| grep "Start serving"**
   
   
5. 日志正常打印后，刷新UCS控制台页面，查看集群是否正常连接。
 
 #### 排查项三：集群认证信息变化
如错误显示"cluster responded with non-successful status: \[401\]\[Unauthorized\]"，通过观察集群三个Master节点"/var/paas/sys/log/kubernetes/auth-server.log"日志，可能是IAM网络连通故障。请确认IAM域名解析能力，及IAM服务连通性正常。
常见问题日志如下：
- Failed to authenticate token: \*\*\*\*\*\*\*: dial tcp: lookup iam.myhuaweicloud.com on \*.\*.\*.\*:53: no such host 此类日志说明，节点缺少对iam.myhuaweicloud.com解析能力，请参考[安装前准备](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0336.html)，配置对应的域名解析。
  
- Failed to authenticate token: Get \*\*\*\*\*\*\*: dial tcp \*.\*.\*.\*:443: i/o timeout 此类日志说明，节点访问IAM服务超时，请确保节点与华为云IAM服务能正常通信。
  
- currently only supports Agency token 此类日志说明请求不是从UCS服务发起，目前本地集群只支持UCS服务IAM Token访问。
  
- IAM assumed user has no authorization/iam assumed user should allowed by TEAdmin 此类日志说明UCS服务访问集群故障，请联系华为技术人员进行排障。
  
- Failed to authenticate token: token expired, please acquire a new token 此类日志说明Token存在过期现象，请使用**date**命令确定时间是否差距过大，如果节点时间与标准时间差距过大，请同步时间后，查看集群是否恢复。如果长时间未恢复，可能需要重装集群，请联系华为技术人员进行排障。
  
解决上述问题后，请使用**crictl ps \| grep auth \| awk '{print $1}' \| xargs crictl stop**命令重启auth-server容器。
