Rancher常见问题
1. 无法均衡负载,nodeport端口只有一台机器能访问
只能访问一台宿主机的nodeport,并且还是pod所在那台机器,出现这种问题很大原因是因为,跨集群网络有问题,或本地防火墙问题,排查思路如下:
在宿主机本机telnet localhost:nodeort看看是否能通,本机能通,在集群内互相telnet测试,如果不能通根部署环境网络有很大关系,建议联系网络管理员进行排查。
如果本机telnet也不能通,进行如下测试。
a、首先我们需要或取对应的pod 信息
比如我这个test-6b4cdf4ccb-7pzt6在rancher-kf-worker01节点上,它的ip为10.42.3.23
b、先在pod所在的宿主机上然后在另外几个节点去ping这个ip,看看能否ping通,在canal网络模式下,请检查防火墙端口8472/UDP是否开放。查看每天机器上是否有尝试使用每台机器的flannel.1网卡,用的话,用flannel.1上的ip互相ping,看看是否能通,因为flannel网络和canal网络是通过flannel.1网卡互相建立vxlan遂道的。建议操作在关闭防火墙的情况下测试。
2. 负载均衡时同一个客户端的请求被路由回服务器集群中的不同服务器,也就是说同一个IP的请求会被平均分配给所有的pod。
在Kubernetes的service中是可以设置Session Affinity。粘性会话会基于客户端访问服务的ip进行hash运算后把同一ip的请求路由到同一个pod.这样通过nodePort方式过来的请求就不会平均分发了。
在rancher中需要通过设置负载均衡的标签来实现,在负载均衡中的annotations添加以下标签
nginx.ingress.kubernetes.io/affinity: cookie
nginx.ingress.kubernetes.io/session-cookie-hash: sha1
nginx.ingress.kubernetes.io/session-cookie-name: route
如图:
3. 上传大于1M的文件,报"413 Request Entity Too Large"
比如我们的 /api 有上传文件的需求,而默认的请求尺寸最大为 1m 会导致文件上传报错 413,通过添加注解 nginx.ingress.kubernetes.io/proxy-body-size 可以指定请求大小限制
4. ingress 配置ssl证书后http重定向到https
ingress默认开启https跳转,但是不是强制跳转,只有ingress配置了证书后才会开启重定向
添加注解关闭重定向
nginx.ingress.kubernetes.io/ssl-redirect: "false"
kubernetes.io/ingress.allow-http: "true"
5. 数据卷挂载configmap因权限不够,容器加载配置文件未能生效
当通过configmap方式挂载配置文件时,数据卷的默认模式为400,这时我们在容器里看到挂载的配置文件权限是"-r--------",如果我们容器中运行的程序要求用户为非root用户时,例如mysql、mariadb。我们挂载进容器的配置文件就无法被程序读取,配置文件也就无法生效了。
解决方法只需要根据程序的运行要求给足相应的权限即可,例如只读444或644
6. 采用 annotation 对特定服务做配置
默认的 nginx 配置未必适合我们的服务,访问 Nginx Configuration 可以看到 ingress-nginx 所提供的三种 nginx 配置方式。其中 ConfigMaps 可以实现对 nginx 默认配置的修改;而 ingress annotation 则可以实现对特定 ingress 进行配置。
每次修改 ingress 后,nginx-ingress-controller 会默认更新 nginx.conf,立即生效。
7. 添加主机时,一直在等待注册
查看发现etcd没有连接上,出现error "tls: failed to verify client's certificate: x509: certificate
类似错误。可以考虑安装的swarm的证书过期或无效了,解决:将/var/lib/docker/swarm目录删除或更名.重启服务.
8. Rancher 2.5.x 及之后的版本docker 无法启动,报错:ERROR: Rancher must be ran with the --privileged flag when running outside outside of Kubernetes
与 2.4.x 或之前的版本相比,使用docker run命令安装 Rancher 2.5.x 时,需要添加--privileged标志变量,启用特权模式安装 Rancher。
9. Rancher开启跨域
开启跨域需要添加以下注解,可以根据需要自行修改。具体参数说明可以参考Enable CORS
nginx.ingress.kubernetes.io/cors-allow-headers: '"DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization"'
nginx.ingress.kubernetes.io/cors-allow-methods: '"PUT, GET, POST, OPTIONS"'
nginx.ingress.kubernetes.io/cors-allow-origin: '*'
nginx.ingress.kubernetes.io/enable-cors: "true"
rancher中配置界面参考下图
Qbss
感谢博主的文章,借用到解决了问题
姜小白
这篇文章非常给力,真的全是使用rancher遇到的一些常见问题。关于问题4:ingress 配置ssl证书后http重定向到https这个问题,我不知道这两个注解是加在什么地方,测试不生效。可能是我加错了地方,万望答疑,感谢感谢。
Pony
@姜小白 : 在负载均衡的Ingress规则中的标签/注释中添加,具体添加地方可以参考问题3的界面。文档编辑时rancher的版本为v2.1.6。我这边的rancher已经升级到了v2.3.5。显示标签 kubernetes.io/ingress.allow-http: "true" 已经变为灰色。暂时不确定新版本是否有变动。具体可以查看ingress annotation 规则以及rancher官方文档