• K8S ingressv1.1.3 部署



    1. 简介

    K8S 集群对外暴露服务的方式目前只有三种:

    • Loadblancer
    • Nodeport
    • ingress

    ingress 由两部分组成:

    • ingress controller:将新加入的 Ingress 转化成 Nginx 的配置文件并使之生效
    • ingress 服务:将 Nginx 的配置抽象成一个 Ingress 对象,每添加一个新的服务只需写一个新的 Ingress 的 yaml 文件

      其中 ingress controller 目前主要有两种:基于 nginx 服务的 ingress controller 和基于 traefik 的 ingress controller。而其中 traefik 的 ingress controller 目前支持 http 和 https 协议。由于对 nginx 比较熟悉,而且需要使用 TCP 负载,所以在此我们选择的是基于 nginx 服务的 ingress controller。
      但是基于 nginx 服务的 ingress controller 根据不同的开发公司,又分为 k8s 社区的 ingress-nginx 和 nginx 公司的 nginx-ingress。根据 github 上的活跃度和关注人数,我们选择的是 k8s 社区的 ingress-nginx。

    ingress 的工作原理:
    1️⃣ ingress contronler 通过与 k8s 的 api 进行交互,动态的去感知 k8s 集群中 ingress 服务规则的变化,然后读取它,并按照定义的 ingress 规则,转发到 k8s 集群中对应的 service。
    2️⃣ 而这个 ingress 规则写明了哪个域名对应 k8s 集群中的哪个 service,然后再根据 ingress-controller 中的 nginx 配置模板,生成一段对应的 nginx 配置。
    3️⃣ 然后再把该配置动态的写到 ingress-controller 的 pod 里,该 ingress-controller 的 pod 里面运行着一个 nginx 服务,控制器会把生成的 nginx 配置写入到 nginx 的配置文件中,然后 reload 一下,使其配置生效,以此来达到域名分配置及动态更新的效果。
    在这里插入图片描述

    ingress 的用处:

    • 动态配置服务:如果按照传统方式,当新增加一个服务时,我们可能需要在流量入口加一个反向代理指向我们新的 k8s 服务。而如果用了 Ingress,只需要配置好这个服务,当服务启动时,会自动注册到 Ingress 中,不需要额外的操作。
    • 减少不必要的端口暴露:配置过 k8s 的都清楚,第一步是要关闭防火墙的,主要原因是 k8s 的很多服务会以 NodePort 的方式映射出去,这样就相当于给宿主机打了很多孔,既不安全也不优雅。而 Ingress 可以避免这个问题,除了 Ingress 自身服务可能需要映射出去,其他服务都不要用 NodePort 的方式。

    2. ingress 安装

    这里采用 yaml 安装的方式,其他还有 helm 安装的方式。
    步骤

    wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.3/deploy/static/provider/cloud/deploy.yaml

    1. 注释 externalTrafficPolicy: Local
    2. 修改 controller/deploy 的 image:
      image: registry.cn-hangzhou.aliyuncs.com/chenby/controller:v1.1.3
    3. 修改 ingress-nginx-admission-create 的 image:
      image: registry.cn-hangzhou.aliyuncs.com/chenby/kube-webhook-certgen:v1.1.1
    4. 修改 ingress-nginx-admisson-patch 的 image:
      image: registry.cn-hangzhou.aliyuncs.com/chenby/kube-webhook-certgen:v1.1.1

    PS:直接下载可能下不下来,这里我提供一个下载,内容已经修改过。

    wget http://49.232.8.65/yaml/deploy.yaml
    
    • 1

    2.1 安装 ingress-nginx 控制器

    [root@master ~]#wget http://49.232.8.65/yaml/deploy.yaml
    ......
    [root@master ~]#kubectl apply -f deploy.yaml 
    ......
    [root@master ~]#kubectl get deploy -n ingress-nginx
    NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
    ingress-nginx-controller   1/1     1            1           3m18s
    [root@master ~]#kubectl get pods,svc -n ingress-nginx -o wide
    NAME                                            READY   STATUS      RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
    pod/ingress-nginx-admission-create--1-5wf5l     0/1     Completed   0          3m28s   10.42.1.11   node01   <none>           <none>
    pod/ingress-nginx-admission-patch--1-hv9pp      0/1     Completed   0          3m28s   10.42.2.9    node02   <none>           <none>
    pod/ingress-nginx-controller-7cb84487bd-xldfz   1/1     Running     0          3m28s   10.42.2.10   node02   <none>           <none>
    
    NAME                                         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE     SELECTOR
    service/ingress-nginx-controller             LoadBalancer   10.43.70.205    <pending>     80:31387/TCP,443:30580/TCP   3m28s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
    service/ingress-nginx-controller-admission   ClusterIP      10.43.222.253   <none>        443/TCP                      3m28s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.2 启用后端

    [root@master ~]#wget http://49.232.8.65/yaml/backend.yaml
    ......
    [root@master ~]#kubectl apply -f backend.yaml 
    deployment.apps/default-http-backend created
    service/default-http-backend created
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.3 安装测试应用

    [root@master ~]#wget http://49.232.8.65/yaml/ingress-demo-app.yaml
    ......
    [root@master ~]#kubectl apply -f ingress-demo-app.yaml 
    deployment.apps/hello-server created
    deployment.apps/nginx-demo created
    service/nginx-demo created
    service/hello-server created
    ingress.networking.k8s.io/ingress-host-bar created
    [root@master ~]#kubectl get ingress
    NAME               CLASS   HOSTS                            ADDRESS   PORTS   AGE
    ingress-host-bar   nginx   hello.chenby.cn,demo.chenby.cn             80      8s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.4 过滤查看 ingress 端口

    [root@master ~]#kubectl get svc -A | grep ingress
    ingress-nginx   ingress-nginx-controller-admission   ClusterIP      10.43.63.85     <none>        443/TCP                      18m
    ingress-nginx   ingress-nginx-controller             NodePort       10.43.186.87    <none>        80:31039/TCP,443:30343/TCP   18m
    
    • 1
    • 2
    • 3

    Ingress-nginx v-0.29.0
    k8s 之服务暴露 — traefix 控制器
    k8s 之 nginx-ingress


  • 相关阅读:
    keepalived高可用,nginx+keepalived+apache架构的实现
    综述 | 关于点云配准的全面综述(一)
    2022.11.17补题祭
    数据库的操作
    Apache Kafka与Spring整合应用详解
    触控笔有必要买吗?便宜好用的手写笔推荐
    排序算法的稳定性
    js中小数四则运算精度问题原因及解决办法
    Arrays.asList() 使用说明
    xxl-job做集群的时候,用F5做负载均衡效率高还是直接写死几个服务器地址的效率高?
  • 原文地址:https://blog.csdn.net/shenyuanhaojie/article/details/125453616