|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

 

 

posted on   yanqi_vip  阅读(26)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示