简单 Ingress Controller 管理
# 查看生成的配置文件 kubectl exec -it -n "ingress-nginx" nginx-ingress-controller-67956bf89d-fv58j cat /etc/nginx/nginx.conf # 查看当前 Nginx 版本 kubectl exec -it $POD_NAME -n $POD_NAMESPACE -- /nginx-ingress-controller --version
[Sol.] Nginx Ingress Controller 是否会自动加载 TLS 证书?
Cert Manager 负责 Certificate 的续期,在续期成功后,Certificate 关联的 Secret 也将被更新;
我们的疑问是 Nginx Ingress 是否会自动加载新的 Secret 以使 TLS 更新,还需需要手动 reload 配置?
我们猜测 Nginx Ingress Controller 能够自动加载新的 Secret 内容,原因是:如果 Cert Manager 更新完 Secret,还需要 Reload Ingress 的话,那么 Cert Manager 需要适配各种 Ingress Controller 实现,来完成 reload 动作。如果不是这样的话,那么 Kubernetes 就要提供一种机制,让来通知 Ingress Controller 需要 reload 配置;
然后,根据 https://github.com/cert-manager/cert-manager/issues/1816#issuecomment-506509695 的只言片语,我们更加认为 Ingress Controller 应该自动检测 Secret 的变化;
[Sol.] NGINX master process died (-1): signal: illegal instruction (core dumped)
process exit with code 132 #39
0.25.0 crashes at backend reload maybe due to recent OpenResty changes #4311
问题描述
环境概述
- CentOS Linux release 7.4.1708 (Core)
- Kubernetes v1.12.1
- Docker version 18.06.1-ce, build e68fc7a
- Helm v3.0.0-beta.3
在集群中部署 Nginx Ingress Controller 组件,但是在某两个节点(node3、node4)中 nginx-ingress-controller 无法启动。错误信息如下:
NGINX master process died (-1): signal: illegal instruction (core dumped) ------------------------------------------------------------------------------- W1207 07:56:02.153812 8 nginx.go:39] ------------------------------------------------------------------------------- NGINX master process died (-1): signal: illegal instruction (core dumped) ------------------------------------------------------------------------------- W1207 07:56:02.165902 8 nginx.go:39] ------------------------------------------------------------------------------- NGINX master process died (-1): signal: illegal instruction (core dumped) ------------------------------------------------------------------------------- W1207 07:56:02.179189 8 nginx.go:39] ------------------------------------------------------------------------------- NGINX master process died (-1): signal: illegal instruction (core dumped) ------------------------------------------------------------------------------- W1207 07:56:02.190344 8 nginx.go:39] ------------------------------------------------------------------------------- NGINX master process died (-1): signal: illegal instruction (core dumped) ------------------------------------------------------------------------------- W1207 07:56:02.202655 8 nginx.go:39] -------------------------------------------------------------------------------
还有另外壹点,新版 Nginx Ingress Controller 镜像中,使用 Openresty 程序;
原因分析
遇到这种问题肯定去搜索呀。既然有错误日志,而且还是 NGINX 输出的错误日志,这就说明这是壹个可预见的错误;
然后我找到下面两篇讨论:
1)process exit with code 132 #39
2)0.25.0 crashes at backend reload maybe due to recent OpenResty changes #4311
在上述讨论中,问题已经很清楚。作者在程序中使用了新 CPU 指令集(SSE 4.2),作者也不打算支持旧 CPU 型号;
解决方案
目前,我们能够想到的解决办法有两个:
1)将节点迁移到新服务器(那些 CPU 支持 SSE 4.2 指令集的服务器),或者将 Pod 调度到新节点(如果使用 DaemonSet 部署,则仅能迁移虚拟机到新服务器)
2)而实际上,Openresty 程序也有“No SSE 4.2”版本。(但是不知道 Nginx Ingress Controller 镜像有没有“No SSE 4.2”版本)
很显然我们选择第一个方案,直接将节点迁移到新物理机中;