记录一个bug:目前很多服务使用k8s作为注册中心和负载均衡中间件。但是在项目使用中,会出现一个问题。服务运行一段时间之后,会出现无法获取k8s上服务列表的bug,返回403

现象:

如下:

{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"endpoints \"ifaas-xxxxxx\" is forbidden: User \"system:anonymous\" cannot get resource \"endpoints\" in API group \"\" in the namespace \"xxxxxx\"","reason":"Forbidden","details":{"name":"ifaas-xxxxxx","kind":"endpoints"},"code":403}

解决方案:

1、更改k8s的api鉴权,允许匿名访问: --anonymous-auth=true

2、更换注册中心(没有尝试过这种方案,但是根据理论知识应该可行)

3、在feign调用中采用固定url的写法(这也是目前我采用的方案);如下所示:

 

// 从k8s获取服务,报403的错误,暂时先采用 url = "http://xxxx:8010" 来绕过k8s鉴权失败问题
@FeignClient(value = "xxxx",url = "http://xxxx:8010",fallback = AppClient Call.class)
public interface AppClient {

}

 其中xxxx是服务名称,这样可以做到服务拓展,因为服务部署的时候,k8s已经可以做好域名和服务ip的映射

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐