|NO.Z.00296|——————————|CloudNative|——|KuberNetes&运维.V17|——|监控.v03|部署ingress.helm方式|
一、通过helm安装ingress
### --- 下载ingress版本包
~~~ 添加ingress的helm仓库
[root@k8s-master01 ingress]# helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories
### --- 查看已经生成的helm仓库
[root@k8s-master01 ingress]# helm repo list
NAME URL
ingress-nginx https://kubernetes.github.io/ingress-nginx
### --- 下载ingress的helm包至本地
[root@k8s-master01 ingress]# helm search repo ingress-nginx // 查询当前helm下ingress的的包版本
NAME CHART VERSION APP VERSION DESCRIPTION
ingress-nginx/ingress-nginx 3.6.0 0.46.0 Ingress controller for Kubernetes using NGINX a...
[root@k8s-master01 ingress]# helm pull ingress-nginx/ingress-nginx // 下载包,第一个ingress-nginx是仓库的名称,第二个ingress-nginx是helm的包名
二、修改ingress的配置文件
### --- 修改配置参数
[root@k8s-master01 ingress]# tar -zxvf ingress-nginx-3.6.0.tgz
[root@k8s-master01 ingress]# cd ingress-nginx
[root@k8s-master01 ingress-nginx]# vim values.yaml
~~~ # 注释一:
controller:
image:
repository: registry.cn-beijing.aliyuncs.com/dotbalo/controller # 定义为阿里云的镜像仓库
tag: "v0.40.2"
#digest: sha256:46ba23c3fbaafd9e5bd01ea85b2f921d9f2217be082580edc22e6c704a83f02f //哈希值给注释
~~~ # 注释二:
hostNetwork: true # 部署ingress的方式推荐使用hostNetwork去部署,hostNetwork是直接使用宿主机的端口号,这样它的性能可能会好一点。
~~~ # 注释三:
dnsPolicy: ClusterFirstWithHostNet # 若是使用hostNetwork的话dns策略是需要更改为ClusterFirstWithHostNet。不然k8s的pod是解析不了k8s内部的service,所以一定要设置成这个
~~~ # 注释四:
kind: DaemonSet # 使用DaemonSet去部署,使用deployment也是可以的,但是使用DaemonSet更受控制,我们可以固定到某个节点上面。这样就可以直接在宿主机上暴露一个端口号,这样k8s外部的集群就可以直接代理到Ingress上面。若是使用Deployment的话,可能需要deploymentservice可能暴露一个notepad,这样性能可能不是很好,推荐使用DaemonSet去部署,DaemonSet在去部署ingress的pod,暴露它的80和443端口,然后在外部的service代理到这个ingress所在的节点上的IP地址和端口号就可以。
nodeSelector:
kubernetes.io/os: linux
ingress: "true" # 我们不是所有节点上都不熟ingress,只有ingress为true这个标签的部署,没有就不用去部署了。
~~~ # 注释五:
resources: # 这个位置是没有更改的,若是在生产环境下建议限制一下,若是专有节点的话,可以不用去限制。它可以占用整个宿主机的资源。这个资源给的大一点,应为它是k8s的入口,占用的资源还是比较多的。
# limits:
# cpu: 100m
# memory: 90Mi
requests:
cpu: 100m
memory: 90Mi
~~~ # 注释六:
type: ClusterIP # 这边不使用LoadBalancer;LoadBalancer是在云环境中会使用到,若是在我们的机房,就不适用LoadBalancer,因为我们是通过Clusetnetwork去部署的,我们直接通过宿主机IP+端口号就可以访问到资源,所以不使用LoadBalancer;若是云环境的话就需要配置。
~~~ # 注释七
admissionWebhooks: # 是准入控制;若是你的版本过低的话,比如你的版本是0.35的,这个enabled是不能设置为true的,设置为true的话,部署ingress会报错,报错你的证书版本不正确,但是在0.40之后是不会报错的。
annotations: {}
enabled: true
failurePolicy: Fail
# timeoutSeconds: 10
port: 8443
certificate: "/usr/local/certificates/cert"
key: "/usr/local/certificates/key"
namespaceSelector: {}
objectSelector: {}
~~~ # 注释八:
patch:
enabled: true
image:
repository: registry.cn-beijing.aliyuncs.com/dotbalo/kube-webhook-certgen
tag: v1.3.0
pullPolicy: IfNotPresent
### --- 注释详解
~~~ Controller和admissionWebhook的镜像地址,需要将公网镜像同步至公司内网镜像仓库(和课程不一致的版本,需要自行同步gcr镜像的,可以百度查一下使用阿里云同步gcr的镜像,也可以参考这个连接https://blog.csdn.net/weixin_39961559/article/details/80739352,或者参考这个连接: https://blog.csdn.net/sinat_35543900/article/details/103290782)
~~~ hostNetwork设置为true
~~~ dnsPolicy设置为 ClusterFirstWithHostNet
~~~ NodeSelector添加ingress: "true"部署至指定节点
~~~ 类型更改为kind: DaemonSet
三、部署ingress
### --- 创建ingress的namespace:建议Ingress部署在我们创建的namespace上
[root@k8s-master01 ingress-nginx]# kubectl create ns ingress-nginx
namespace/ingress-nginx created
[root@k8s-master01 ingress-nginx]# kubectl get ns
NAME STATUS AGE
ingress-nginx Active 4s
### --- 为需要部署的宿主机打标签
[root@k8s-master01 ingress-nginx]# kubectl label node k8s-master01 ingress=true
node/k8s-master01 labeled
### --- 部署ingress
~~~ 提示信息可以使用这个例子去创建一个Ingress
[root@k8s-master01 ingress-nginx]# helm install ingress-nginx -n ingress-nginx .
### --- 查看创建的Ingress
[root@k8s-master01 ingress-nginx]# kubectl get po -n ingress-nginx -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ingress-nginx-controller-hzqlv 1/1 Running 0 5m24s 192.168.1.11 k8s-master01 <none> <none>
四、ingress扩容节点
### --- 将ingress controller部署至Node节点;扩节点,比如部署在k8s-node01节点
[root@k8s-master01 ingress-nginx]# kubectl label node k8s-node01 ingress=true
node/k8s-node01 labeled
### --- 扩容之后在k8s集群外部还有LSB需要把后端ingress地址给加上(扩容的地址)
[root@k8s-master01 ingress-nginx]# kubectl get po -n ingress-nginx -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ingress-nginx-controller-rfnj8 1/1 Running 0 4m27s 192.168.1.11 k8s-master01 <none> <none>
ingress-nginx-controller-xd9dc 1/1 Running 0 94s 192.168.1.14 k8s-node01 <none> <none>
五、ingress缩容节点
### --- 缩节点 剔除k8s-master01节点的ingress controller
~~~ 注://把这个标签给删除掉,删掉之后这个节点的pod就会被删除掉。
~~~ 它就不符合noteselect了,就会把之前的删除掉。
~~~ # 删掉的顺序是:需要现在k8s之外的LBS上把需要下掉的比如master03的IP地址+端口号给剔除掉,
~~~ 然后在执行,不然可能出现服务宕机或者服务不响应的情况。
[root@k8s-master01 ingress-nginx]# kubectl label node k8s-master01 ingress-
node/k8s-master01 labeled
[root@k8s-master01 ingress-nginx]# kubectl get po -n ingress-nginx -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ingress-nginx-controller-xd9dc 1/1 Running 0 94s 192.168.1.14 k8s-node01 <none> <none>
六、为所有节点打标签部署ingress
### --- 为所有节点打标签,让其符合部署ingress
[root@k8s-master01 ingress-nginx]# kubectl label node k8s-master01 ingress=true
node/k8s-master01 labeled
[root@k8s-master01 ingress-nginx]# kubectl label node k8s-node01 ingress=true
node/k8s-node01 labeled
[root@k8s-master01 ingress-nginx]# kubectl label node k8s-node02 ingress=true
### --- 查看部署的Ingress
[root@k8s-master01 ingress-nginx]# kubectl get po -n ingress-nginx -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ingress-nginx-controller-hzqlv 1/1 Running 0 5m24s 192.168.1.11 k8s-master01 <none> <none>
ingress-nginx-controller-strgc 1/1 Running 0 64m 192.168.1.14 k8s-node01 <none> <none>
ingress-nginx-controller-t526s 1/1 Running 0 5m13s 192.168.1.15 k8s-node02 <none> <none>
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了