当前位置:   article > 正文

30-k8s集群的七层代理-ingress资源(进阶知识)

30-k8s集群的七层代理-ingress资源(进阶知识)

一、ingress概述

1,引发问题

        目前使用svc资源做网络暴露,使用nodeport类型,一个业务对应一个宿主机端口,那么如果业务多了,所占用的宿主机端口也就多了,虽然说宿主机端口一般情况下都是够用的,但是,对于研发、运维来讲,不同业务不同的端口,业务如果过多,管理起来就更加费力;

2,总结

        1,集群宿主机端口占用太多

        2,当一个端口需要被多个服务使用的时候,就力不从心了,假设两个业务,都想要用443端口,那么就无法使用了;

3,ingress资源

        ingress资源,是k8s中抽象的资源,给管理员提供暴露服务的入口“自定义”的方法,换句话说就是编辑网络暴露入口的规则;

        ingress资源,根据ingress生成具体的“路由规则”,同时借助SVC资源实现pod的负载均衡;

二、部署ingress资源的依赖组件traefik

        使用ingress设置外部访问路由规则,需要有附加组件traefik的支持;

参考链接:Traefik Installation Documentation - Traefik

安装方式有很多种,可以在traefik官网查看,本次教学,我们使用刚刚学过的helm方式安装;

1,添加traefik的helm仓库

[root@k8s231 ingress]# helm repo add traefik https://traefik.github.io/charts
"traefik" has been added to your repositories

2,更新helm仓库

[root@k8s231 ingress]# helm repo update

3,拉取traefik的chart压缩包

[root@k8s231 ingress]# helm pull  traefik/traefik

4,解压chart压缩包

[root@k8s231 ingress]# tar xf traefik-26.1.0.tgz

5,修改traefik中的svc类型

        因为traefik的svc类型默认是云端负载均衡器的类型(loadbancer),为了学习,我们需要将其修改为nodeport;

        将787行的service类型,type改成NodePort

[root@k8s231 ingress]# vim traefik/values.yaml +787

782 service:
783   enabled: true
784   ## -- Single service is using `MixedProtocolLBService` feature gate.
785   ## -- When set to false, it will create two Service, one for TCP and one for UDP.
786   single: true
787   #type: LoadBalancer
788   type: NodePort

6,安装traefik的chart

[root@k8s231 ingress]# helm install xinjizhiwatraefik traefik

注意:等待traefik的pod拉取成功,编程running之后,再做下一步操作哦;

[root@k8s231 ingress]# kubectl get pods

7,暴露traefik的dashboard管理页面

        通过traefik的dashboard就可以页面访问查看访问路由了;

[root@k8s231 ingress]# kubectl port-forward $(kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000 --address 0.0.0.0

8,浏览器访问k8s集群的9000端口

浏览器访问:http://10.0.0.231:9000/dashboard/#/

至此,ingress资源的依赖traefik组件就部署成功了;

三、traefik组件与ingress之间的关系

        1,traefik对外暴露宿主机的两个端口,然后转发到trafik的svc暴露的80和443端口;

[root@k8s231 template]# kubectl get svc

        2,traefik将域名通过ingress规则,转发到对应业务服务的svc资源上

        3,也正因为这个方式,使得业务本身的svc不需要再对外使用宿主机暴露端口了;

        4,任何请求,都先到traefik中;

四、ingress规则七层反向代理实战

1,模拟两个业务服务网

· 创建【业务一】

[root@k8s231 template]# cat 01.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm01
spec:
  replicas: 3
  selector:
    matchLabels:
      k8s: xinjizhiwa
  template:
    metadata:
      labels: 
        k8s: xinjizhiwa
    spec:
      containers:
      - name: c1
        image: nginx:1.20.1-alpine
---
apiVersion: v1
kind: Service
metadata:
  name: svc01
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    k8s: xinjizhiwa

[root@k8s231 template]# kubectl apply -f 01.yaml

· 创建【业务二】

[root@k8s231 template]# cat 02.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm02
spec:
  replicas: 3
  selector:
    matchLabels:
      k8s: xjzw
  template:
    metadata:
      labels: 
        k8s: xjzw
    spec:
      containers:
      - name: c1
        image: nginx:1.24.0-alpine
---
apiVersion: v1
kind: Service
metadata:
  name: svc02
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    k8s: xjzw

[root@k8s231 template]# kubectl apply -f 02.yaml 

2,创建ingress资源(设置路由规则)

[root@k8s231 template]# cat ingress.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress01
  annotations:
    #指定ingress控制器为“traefik”;
    kubernetes.io/ingress.class: traefik
spec:
  #设置ingress的访问规则;
  rules: 
  #访问ingress的主机名称是什么?谁来访问我?就是“域名”
  - host: www.xinjizhiwa.com
    #定义http相关的规则 
    http:
      #指定这个规则的域名,路由到哪个SVC上?
      paths:
      #指定svc的信息
      - backend:
          service:
            #svc名称
            name: svc01
            #svc访问端口
            port:
              number: 80
        #指定匹配的类型,此处我们使用“前缀匹配”,(容错性比较强)
        pathType: Prefix
        path: "/"
        #path: "/333"
  #访问ingress的主机名称是什么?谁来访问我?就是“域名”
  - host: zabbix.xinjizhiwa.com
    #定义http相关的规则 
    http:
      #指定这个规则的域名,路由到哪个SVC上?
      paths:
      #指定svc的信息
      - backend:
          service:
            #svc名称
            name: svc02
            port:
              number: 80
        pathType: Prefix
        path: "/"

[root@k8s231 template]# kubectl apply -f ingress.yaml 

3,本地浏览器解析两个域名

10.0.0.231 www.xinjizhiwa.com www.xjzw.com

4,浏览器使用域名访问

· 【业务一】访问traefik模拟的80端口

www.xinjizhiwa.com:30608

· 【业务一】访问traefik模拟的443端口

https://www.xinjizhiwa.com:31605/

· 【业务二】访问traefik模拟的80端口

zabbix.xinjizhiwa.com:30608

· 【业务二】访问traefik模拟的443端口

https://zabbix.xinjizhiwa.com:31605

五,企业级ingress架构(了解)

        多traefik实现高可用;

至此,k8s的七层反向代理,traefik组件配合ingress规则学习完毕;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/158429
推荐阅读
相关标签
  

闽ICP备14008679号