网站首页 > 技术教程 正文
最近把一套K8S集群的Nginx Ingress Controller从v0.33升级到了v1.0.5,属于主版本升级,在这里整理一下升级的过程和遇到的问题。 这套k8s集群的信息如下:
- k8s版本为v1.21.5
- 使用Ingress将集群外部http流量接入到集群内部,当前集群中共有三十多个Ingress资源
- ingress controller使用的是https://github.com/kubernetes/ingress-nginx/,版本是v0.33,基于yaml文件格式的Manifest部署
升级前的准备工作
修改集群中的Ingress资源使其与1.x版本的Nginx Ingress Controller以及后续版本的k8s(>=1.22)兼容,修改主要涉及两个方面:
- 将集群中Ingress资源还在使用apiVersion: networking.k8s.io/v1beta1的API版本修改到apiVersion: networking.k8s.io/v1。networking.k8s.io/v1beta1 API从k8s 1.19被标记为废弃,将在k8s 1.22被移除。借着这次升级ingress controller的机会,将集群中的Ingress的API版本统一更新一下。
- 将集群中所有Ingress资源的Manifest的spec下加入: ingressClassName: nginx。从Nginx Ingress Controller 1.0.0开始,安装Nginx Ingress Controller需要一个IngressClass对象,这样集群中的Ingress资源就可以配置使用不同的Ingress Controller。
下面是一个具体的Ingress示例,apiVersion指定了networking.k8s.io/v1了,ingressClassName: nginx指定了这个Ingress将使用名称为nginx的IngressClass对应的Ingress Controller:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubernetes-dashboard
namespace: kube-system
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
ingressClassName: nginx
tls:
- hosts:
- k8s.example.com
secretName: example-com-tls-secret
rules:
- host: k8s.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 443
升级Nginx Ingress Controller
因为旧的v0.33版本的Nginx Ingress Controller是基于yaml文件格式的Manifest部署,新的v1.0.5版本想用helm来部署。在升级前使用kubectl delete命令删除v0.33的资源,注意这会导致集群中的Ingress暴露的应用无法访问,所以升级操作在晚上进行,使用helm安装v1.0.5操作同步进行。
helm chart使用的是提前从https://github.com/kubernetes/ingress-nginx/releases下载的ingress-nginx-4.0.9.tgz。需要针对你的集群定制一个这个chart的Values文件values.yaml:
imagePullSecrets:
- name: regsecret
controller:
config:
use-forwarded-headers: "true"
proxy-set-headers: "ingress-nginx/custom-headers"
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
ingressClassResource:
name: nginx
enabled: true
default: false
controllerValue: "k8s.io/ingress-nginx"
admissionWebhooks:
enabled: false
replicaCount: 3
image:
registry: registry.example.com
image: image/nginx-ingress-controller
tag: "v1.0.5"
digest: sha256:bc30cb296e7548162afd9601f6b96261dcca8263e05b962694d1686b4d5a9584
hostNetwork: true
nodeSelector:
node-role.kubernetes.io/edge: ''
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nginx-ingress
- key: component
operator: In
values:
- controller
topologyKey: kubernetes.io/hostname
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
- key: node-role.kubernetes.io/master
operator: Exists
effect: PreferNoSchedule
定制的Values文件由以下基本分组成:
- 1~2行为从私有镜像库registry.example.com拉取镜像的image pull secret的名称,对应的secret需要提前创建好
- 5~7行为往nginx ingress controller的ConfigMap中添加的配置信息,更多的配置可以从https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/中找到
- 12~16行为nginx ingress controller所需的IngressClass资源配置,这里配置表示创建了名称为nginx的IngressClass,并绑定k8s.io/ingress-nginxController即IngressClass nginx对应nginx ingress controller
- 20~24行指定nginx ingress controller的私有镜像库及地址
- 25行指定controller的网络使用hostNetwork。通过26行~48行调度相关的配置,在我们的集群中将3个controller的pod实例调度到集群中三台角色为edge的专门用来运行controller的k8s node上
安装命令如下:
helm install ingress-nginx ingress-nginx-4.0.9.tgz --history-max 5 --create-namespace -n ingress-nginx -f values.yaml
安装后,如果values.yaml有更新,使用下面的命令更新:
helm upgrade ingress-nginx ingress-nginx-4.0.9.tgz --history-max 5 -n ingress-nginx -f values.yaml
猜你喜欢
- 2024-10-13 如何在Tomcat中做TLS客户端认证(tomcat clientauth)
- 2024-10-13 我们应该使用 TLS1.3 吗(启用tls1.1)
- 2024-10-13 阿里云环境中TLS/SSL握手失败的场景分析
- 2024-10-13 「首席架构推荐」基于NGINX 的Kubernetes控制器
- 2024-09-28 如何在 NGINX Web 服务器中限制网络带宽 - Part 3
- 2024-09-28 高性能web服务器+反向代理服务器之Nginx
- 2024-09-28 如何在Node.js中使用SSL / TLS(node js server)
- 2024-09-28 「热点」Service Mesh利器:NGINX将支持gRPC
- 2024-09-28 放弃Nginx,Cloudflare开源基于Rust构建的网络服务框架Pingora
- 2024-09-28 Nginx配置最全详解(万字图文总结)
你 发表评论:
欢迎- 最近发表
-
- Win10 TH2正式版官方ESD映像转换ISO镜像方法详解
- 使用iso镜像升级到Windows 10的步骤
- macOS Ventura 13.2 (22D49) Boot ISO 原版可引导镜像
- 安利一个用ISO镜像文件制作引导U盘的的小工具RUFUS
- CentOS 7使用ISO镜像配置本地yum源
- 用于x86平台的安卓9.0 ISO镜像发布下载:通吃I/A/N、完全免费
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
- Rufus写入工具简洁介绍与教程(写入模式)
- 新硬件也能安装使用了,Edge版Linux Mint 21.3镜像发布
- 开源工程师:Ubuntu应该抛弃32位ISO镜像
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)