|NO.Z.00165|——————————|CloudNative|——|KuberNetes&服务发布.V16|——|ingress.v04|创建ingress.pod|

一、Ingress入门使用
### --- 使用详解:

~~~     # 地址:
~~~     https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/
~~~     # 配置域名的方式有好几种:
~~~     ConfigMap,Annotations,Custom template自定义模板(使用不多);一般使用Annotations
~~~     在k8s中Ingress也是一种资源类型,它和我们的其它资源也是一样的,
~~~     都是通过yaml文件去声明一个Ingress的实例,这个Ingress实例配置了我们的域名,
~~~     这个域名反向的到那个service,
~~~     # 所以说:
~~~     无论你起了多少个IngressPod,我们只需要创建一个yaml文件即可,
~~~     它就会Ingress Controller会监听Ingress的实例文件,读取里面的配置,
~~~     然后自动生成nginx的配置文件
~~~     我们无需去修改每个controller的配置,这样相对传统架构简单化了。
~~~     而且Ingress controler它会有一个校验的功能,若是这个Ingress这个yaml文件写错了。
~~~     或者配置不对,它就不会去应用,不会影响你的业务正确性。
~~~     # Annotations:
~~~     应用发布,跨域的配置,限速的配置等配置文件一般写在Annotations里面,
~~~     然后Ingress Controller会分析你这个Ingress的实例,从Annotations里面读取它的配置,
~~~     然后生成我们的nginx的配置文件。
二、创建一个ingress:创建ingress.yaml配置文件
### --- 创建ingress.yaml配置文件

[root@k8s-master01 ~]# vim ingress.yaml 
apiVersion: networking.k8s.io/v1beta1 # networking.k8s.io/v1 / extensions/v1beta1 
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"        #  声明配置的为ingress.class name为nginx的这个配置,
  name: example
spec:
  rules:                                        #  一个Ingress可以配置多个rules
  - host: foo.bar.com                           #  域名配置,可以不写,匹配*, *.bar.com
    http:
      paths:                                    #  相当于nginx的location配合,同一个host可以配置多个path / /abc
      - backend:
          serviceName: nginx-svc 
          servicePort: 80
        path: / 
### --- 注释:声明ingress.class name的位置

~~~     # ********注释1************
apiVersion: networking.k8s.io/v1beta1           // apiVersion在k8s1.19以后都是建议使用networking.k8s.io/v1beta1这个。这个暂时还没有被废弃掉,在k8s1.22之后会被废弃掉。 
#extensions/v1beta1                             // 这种的是ingress最开始的格式,已经被废弃掉了。 
~~~     # ********注释2************
    annotations:                                // 在创建Ingress中,需要高速ingress,我们实现的配置是什么呢?配置一般都会写在annotations中。 
~~~     # ********注释3************
~~~     我们在创建这个Ingress的时候,指定了一个IngressClass的名称为nginx,
~~~     创建Ingress实例的时候,需要告诉这个接口使用的是一个叫nginx的ingress.class
~~~     因为一个集群中不止一个Ingress,可能会很多,
~~~     声明这个实例需要用nginx的Ingress去解析。其它的可能解析不了。

[root@k8s-master01 ~]# vim /root/ingress-nginx/values.yaml 
  ingressClass: nginx
~~~     # ********注释4************  
spec:   
  rules:                                        // 规定写法 一个Ingress可以配置多个rules
  - host: foo.bar.com                           // 域名配置,可以不写,匹配*, *.bar.com;写固定域名是用的最多的。
    http:
      paths:                                    // 相当于nginx的location配合,同一个host可以配置多个path / /abc
      - backend:
          serviceName: nginx-svc                // 当前域名代理到那个service,匹配了一个域名下的两个路径,也是可以配置的
          servicePort: 80                       // 端口号是service的端口号
        path: /  
三、通过service解析配置的nginx-ingress.pod
### --- 查看创建的ingress-nginx.service
~~~     这种IP地址+端口号的形式是非常不建议的,所以我们可以配置一个Ingress,
~~~     通过域名的方式访问到这个服务上。

[root@k8s-master01 ~]# kubectl get svc
NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
nginx-svc            NodePort       10.101.145.83   <none>          80:31000/TCP,443:32765/TCP   47h
### --- 测试service地址是否正常解析
~~~     配置一个域名,反代到这个service上。   
~~~     Ingress也是有namespace隔离的,Ingress和你的service在同一个namespace下。

[root@k8s-master01 ~]# curl 10.101.145.83   // 这个service可以正常访问
<h1>Welcome to nginx!</h1>
四、通过Chrome验证是否正常解析
### --- 创建Ingress并通过Chrome验证
~~~     提示v1beta1在1.22版本之后会被废弃掉,建议使用v1 

[root@k8s-master01 ~]# kubectl create -f ingress.yaml 
Warning: networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
ingress.networking.k8s.io/example created 
### --- 查看创建的ingress

[root@k8s-master01 ~]# kubectl get ingress
NAME      CLASS    HOSTS         ADDRESS   PORTS   AGE
example   <none>   foo.bar.com             80      15s
### --- 访问一下这个域名

~~~     配置hosts文件,这个hosts需要解析到Ingress所在的宿主机节点上面。
~~~     在生产环境中,购买的域名;可以做一个DNS解析,DNS解析应该是解析到公司入口的LB上的,
~~~     LB在反代到你的k8s的ingress的节点的IP地址和端口号上。
~~~     我们只需要解析到宿主机的IP地址上即可。
~~~     配置本地hosts文件:192.168.1.14 foo.bar.com
~~~     通过Chrome访问:http://foo.bar.com/可以正常解析到welcome to nginx;
~~~     可以正常访问后端的服务。
五、Ingress实例详解
### --- Ingress实例的详解;登入pod里面:它会监听ingress的实例,对应的生成配置文件。
~~~     实现了域名发布的方式。就不用去维护nginx的配置;直接去维护yaml文件即可

[root@k8s-master01 ~]# kubectl exec -ti ingress-nginx-controller-brbvs -n ingress-nginx -- sh
/etc/nginx $ grep "foo.bar.com" nginx.conf
    ## start server foo.bar.com                 //这个域名的开始的配置
        server_name foo.bar.com ;
    ## end server foo.bar.com                   //这个域名的结束的配置
/etc/nginx $ grep "## start server foo.bar.com" nginx.conf -A 20    //查看这个文件的后20行
    ## start server foo.bar.com
    server {
        server_name foo.bar.com ;               //server的名称;
        
        listen 80  ;
        listen [::]:80  ;
        listen 443  ssl http2 ;
        listen [::]:443  ssl http2 ;
        
        set $proxy_upstream_name "-";
        
        ssl_certificate_by_lua_block {
            certificate.call()
        }
        
        location / {
            
            set $namespace      "default";
            set $ingress_name   "example";
            set $service_name   "nginx-svc";
            set $service_port   "80";

 
 
 
 
 
 
 
 
 

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  阅读(30)  评论(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

导航

统计

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