k8s的ingress资源简述

网友投稿 306 2022-09-12

k8s的ingress资源简述

ingress controller是独立与controller-manager的Ingress的主要作用是可以利用nginx,haproxy,envoy,traefik等负载均衡器来暴露集群内部服务。利用Ingress可以解决内部资源访问外部资源的方式,和四层调度替换为七层调度的问题。解决因为四层iptables/ipvs规则实现调度或加密tsl的方式过于复杂且效率低下的问题,因为四层调度的iptables/ipvs模块无法卸载,所以使用七层负载均衡来替代。用户访问过程:用户访问->nodeIP:Nodeport->podIP:containerPortingress原理:用户访问-->LB-->ingress-nginx-service-->ingressController-ingress-nginx-pod-->ingress字段中调用的后端pod后端pod的service只提供pod归类,归类后ingress会将此service中的后端pod信息提取出来,然后动态注入到ingress-nginx-pod中的ingress字段中随后,后端pod就被调用到了例:myapp1.下载资源。github上搜索ingress-nginx,找到deploy项目,下载里面的mandatory.yaml,或在apply -f mandatory.yaml。会创建1个pod:nginx-ingress-controller,1个svc:ingress-nginx,1个namespace             kubectl apply -f service-nodeport.yaml会创建一个service            这两条命令创建出ingress框架:ns/svc/deploy/ingress/,以后创建后端和后端匹配的ingress资源就可以使用生成的svc来访问了2.创建myapp后端资源: 1 apiVersion: v1 2 kind: Service 3 metadata: 4 name: myapp 5 namespace: default 6 spec: 7 selector: 8 app: myapp 9 release: canary 10 ports: 11 - name: http 12 targetPort: 80 13 port: 80 14 --- 15 apiVersion: apps/v1 16 kind: Deployment 17 metadata: 18 name: myapp-deploy 19 namespace: default 20 spec: 21 replicas: 3 22 selector: 23 matchLabels: 24 app: myapp 25 release: canary 26 template: 27 metadata: 28 labels: 29 app: myapp 30 release: canary 31 spec: 32 containers: 33 - name: myapp 34 image: ikubernetes/myapp:v2 35 ports: 36 - name: http 37 containerPort: 80  3.创建ingress 1 apiVersion: extensions/v1beta1 2 kind: Ingress 3 metadata: 4 name: ingress-myapp 5 namespace: default 6 annotations: 7 kubernetes.io/ingess.class: "nginx" 8 spec: 9 rules: 10 - host: smbands.com 11 http: 12 paths: 13 - path: 14 backend: 15 serviceName: myapp ##注此处必须要和后端pod的service的名称一致,否则会报503错误 16 servicePort: 80 ##注此处必须要和后端pod的service的端口一致,否则会报503错误 #然后kubectl apply -f myapp-demo.yaml、kubectl apply -f ingress-demo.yaml。 4.访问。 确保hosts文件可以正确解析即可访问,使用域名+ingress-nginx的service暴露的端口自签证书tls例:1.生成所需文件 生成私钥文件:openssl genrsa -out tls.key 2048  生成证书文件:openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Beijing/L=Beijing/O=DepOps/CN=tomcat.smbands.com会有tls.crt  tls.key两个文件2.创建后端pod资源 1 apiVersion: v1 2 kind: Service 3 metadata: 4 name: tomcat ##下面的Ingess的资源清单里面的serviceName必须与此名称一致,否则报503错误。 5 namespace: default 6 spec: 7 selector: 8 app: tomcat 9 release: canary 10 ports: 11 - name: http 12 targetPort: 8080 13 port: 8080 14 - name: ajp 15 targetPort: 8009 16 port: 8009 17 --- 18 apiVersion: apps/v1 19 kind: Deployment 20 metadata: 21 name: tomcat-deploy 22 namespace: default 23 spec: 24 replicas: 3 25 selector: 26 matchLabels: 27 app: tomcat 28 release: canary 29 template: 30 metadata: 31 labels: 32 app: tomcat 33 release: canary 34 spec: 35 containers: 36 - name: tomcat 37 image: tomcat 38 ports: 39 - name: http 40 containerPort: 8080 41 - name: ajp 42 containerPort: 8009 3.创建secert资源,使其将证书密钥注入到tomcat配置文件中: 1 kubectl create secret tls tomcat-ingress-secret --cert=tls.crt --key=tls.key 4.创建ingress资源: 1 apiVersion: extensions/v1beta1 2 kind: Ingress 3 metadata: 4 name: ingress-tomcat-tls 5 namespace: default 6 annotations: 7 kubernetes.io/ingess.class: "nginx" 8 spec: 9 tls: 10 - hosts: 11 - tomcat-smbands.com 12 secretName: tomcat-ingress-secret 13 rules: 14 - host: tomcat.smbands.com 15 http: 16 paths: 17 - path: 18 backend: 19 serviceName: tomcat ##注:这里的serviceName必须与pod的service名称一致,否则会报503错误。 20 servicePort: 8080 ##注此处必须要和后端pod的service的端口一致,否则会报503错误 5.应用 kubectl apply -f tomcat-ingress-tls.yaml6.访问。 确保hosts文件可以正确解析即可访问,使用域名https://tomcat.smbands.com:ingress的service向外暴露的端口。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:k8s的储存方式简述
下一篇:k8s的pv和pvc简述
相关文章

 发表评论

暂时没有评论,来抢沙发吧~