s网站优化,工地模板图片,唐山网站制作方案,深圳网站建设公司有哪些内容一、ingress概述
1#xff0c;引发问题 目前使用svc资源做网络暴露#xff0c;使用nodeport类型#xff0c;一个业务对应一个宿主机端口#xff0c;那么如果业务多了#xff0c;所占用的宿主机端口也就多了#xff0c;虽然说宿主机端口一般情况下都是够用的#xff0c;…一、ingress概述
1引发问题 目前使用svc资源做网络暴露使用nodeport类型一个业务对应一个宿主机端口那么如果业务多了所占用的宿主机端口也就多了虽然说宿主机端口一般情况下都是够用的但是对于研发、运维来讲不同业务不同的端口业务如果过多管理起来就更加费力
2总结 1集群宿主机端口占用太多 2当一个端口需要被多个服务使用的时候就力不从心了假设两个业务都想要用443端口那么就无法使用了 3ingress资源 ingress资源是k8s中抽象的资源给管理员提供暴露服务的入口“自定义”的方法换句话说就是编辑网络暴露入口的规则 ingress资源根据ingress生成具体的“路由规则”同时借助SVC资源实现pod的负载均衡 二、部署ingress资源的依赖组件traefik 使用ingress设置外部访问路由规则需要有附加组件traefik的支持 参考链接Traefik Installation Documentation - Traefik 安装方式有很多种可以在traefik官网查看本次教学我们使用刚刚学过的helm方式安装
1添加traefik的helm仓库 [rootk8s231 ingress]# helm repo add traefik https://traefik.github.io/charts traefik has been added to your repositories 2更新helm仓库 [rootk8s231 ingress]# helm repo update 3拉取traefik的chart压缩包 [rootk8s231 ingress]# helm pull traefik/traefik 4解压chart压缩包 [rootk8s231 ingress]# tar xf traefik-26.1.0.tgz 5修改traefik中的svc类型 因为traefik的svc类型默认是云端负载均衡器的类型loadbancer为了学习我们需要将其修改为nodeport 将787行的service类型type改成NodePort [rootk8s231 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 [rootk8s231 ingress]# helm install xinjizhiwatraefik traefik 注意等待traefik的pod拉取成功编程running之后再做下一步操作哦 [rootk8s231 ingress]# kubectl get pods 7暴露traefik的dashboard管理页面 通过traefik的dashboard就可以页面访问查看访问路由了 [rootk8s231 ingress]# kubectl port-forward $(kubectl get pods --selector app.kubernetes.io/nametraefik --outputname) 9000:9000 --address 0.0.0.0 8浏览器访问k8s集群的9000端口 浏览器访问http://10.0.0.231:9000/dashboard/#/ 至此ingress资源的依赖traefik组件就部署成功了
三、traefik组件与ingress之间的关系 1traefik对外暴露宿主机的两个端口然后转发到trafik的svc暴露的80和443端口 [rootk8s231 template]# kubectl get svc 2traefik将域名通过ingress规则转发到对应业务服务的svc资源上 3也正因为这个方式使得业务本身的svc不需要再对外使用宿主机暴露端口了 4任何请求都先到traefik中
四、ingress规则七层反向代理实战
1模拟两个业务服务网
· 创建【业务一】 [rootk8s231 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 [rootk8s231 template]# kubectl apply -f 01.yaml · 创建【业务二】 [rootk8s231 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 [rootk8s231 template]# kubectl apply -f 02.yaml 2创建ingress资源设置路由规则 [rootk8s231 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: / [rootk8s231 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规则学习完毕