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
数据卷默认模式 400
6. 采用 annotation 对特定服务做配置
默认的 nginx 配置未必适合我们的服务,访问 Nginx Configuration 可以看到 ingress-nginx 所提供的三种 nginx 配置方式。其中 ConfigMaps 可以实现对 nginx 默认配置的修改;而 ingress annotation 则可以实现对特定 ingress 进行配置。
每次修改 ingress 后,nginx-ingress-controller 会默认更新 nginx.conf,立即生效。
更新时间:2024-08-02 14:28