六安网站自然排名优化价格,市场调研方案怎么写,有没有专门做牛仔的网站,广州软件开发k8s ingress (二) Ingress介绍
在前面课程中已经提到#xff0c;Service对集群之外暴露服务的主要方式有两种#xff1a;NodePort和LoadBalancer#xff0c;但是这两种方式#xff0c;都有一定的缺点#xff1a; NodePort方式的缺点是会占用很多集群机器的端口#xff0…k8s ingress (二) Ingress介绍
在前面课程中已经提到Service对集群之外暴露服务的主要方式有两种NodePort和LoadBalancer但是这两种方式都有一定的缺点 NodePort方式的缺点是会占用很多集群机器的端口那么当集群服务变多的时候这个缺点就愈发明显
LB方式的缺点是每个service需要一个LB浪费、麻烦并且需要kubernetes之外的设备的支持。
基于这种现状kubernetes提供了Ingress资源对象Ingress只需要一个NodePort或者一个LB就可以满足暴露多个Service的需求。工作机制大致如下图表示 实际上Ingress相当于一个7层的负载均衡器是kubernetes对反向代理的一个抽象它的工作原理类似于Nginx,可以理解成在Ingress里建立诸多映射规则Ingress Controller通过监听这些配置规则并转化成Nginx的配置然后对外部提供服务。在这里有两个核心概念 ingresskubernetes中的一个对象作用就定义请求如何转发到service的规则
ingress controller具体实现发向代理及负载均衡的程序对ingress定义的规则进行解析根据配置的规则来实现请求转发实现方式有很多比如Nginx、Contour、Haproxy等等。
Ingress以Nginx为例的工作原理如下 用户编写Ingress规则说明哪个域名对应kubernetes集群中欧冠的哪个Service
Ingress控制器动态感知Ingress服务规则的变化然后生成一段对应的Nginx配置
Ingress控制器会将生成的Nginx配置写入到一个运行着Nginx服务中并动态更新
到此为止其实真正在工作的就是Nginx了内部配置了用户定义的请求转发规则 Ingress 环境准备 在ELB下的监听器中可以通过监听器协议和端口来判断是4层还是7层的。
如果监听器协议是TCP或UDP那么该监听器是4层的。这种监听器只能根据目标端口将流量转发到后端实例不能对流量进行任何处理。
如果监听器协议是HTTP或HTTPS那么该监听器是7层的。这种监听器可以根据请求的URL、HTTP头部等信息对流量进行处理并将流量转发到后端实例。
此外还可以通过监听器端口来判断是4层还是7层的。如果监听器端口是80或443那么该监听器是7层的如果监听器端口是其他端口那么该监听器是4层的 Ingress 的使用
Ingress 环境准备
# 创建文件夹
[rootmaster ~]# mkdir ingress-controller
[rootmaster ~]# cd ingress-controller/
# 获取ingress-nginx,本次案例使用的是0.30版本
[root#master ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
[root#master ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
# 修改mandatory.yaml文件中的仓库(本人实验不需要修改也可以)
# 修改quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
# 为quay-mirror.qiniu.com/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
# 创建ingress-nginx
[rootmaster ingress-controller]# kubectl apply -f ./
# 查看ingress-nginx
[rootmaster ingress-controller]# kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/nginx-ingress-controller-fbf967dd5-4qpbp 1/1 Running 0 12h
# 查看service
[rootmaster ingress-controller]# kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx NodePort 10.98.75.163 none 80:32240/TCP,443:31335/TCP 11h 准备service和pod
为了后面的实验比较方便创建如下图所示的模型 创建tomcat-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata: name: nginx-deployment namespace: dev
spec: replicas: 3 selector: matchLabels: app: nginx-pod template: metadata: labels: app: nginx-pod spec: containers: - name: nginx image: nginx:1.17.1 ports: - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata: name: tomat-deployment namespace: dev
spec: replicas: 3 selector: matchLabels: app: tomcat-pod template: metadata: labels: app: tomcat-pod spec: containers: - name: tomcat image: tomcat:8.5-jre10-slim ports: - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata: name: nginx-service namespace: dev
spec: selector: app: nginx-pod clusterIP: None type: ClusterIP ports: - port: 80 targetPort: 80
---
apiVersion: v1
kind: Service
metadata: name: tomcat-service namespace: dev
spec: selector: app: tomcat-pod clusterIP: None type: ClusterIP ports: - port: 8080
targetPort: 8080 # 创建[rootmaster ~]# kubectl create -f tomcat-nginx.yaml
# 查看
[rootmaster ~]# kubectl get svc -n dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service ClusterIP None none 80/TCP 48s
tomcat-service ClusterIP None none 8080/TCP 48s Http代理
创建ingress-http.yaml apiVersion: extensions/v1beta1
kind: Ingress
metadata: name: ingress-http namespace: dev
spec: rules: - host: nginx.itheima.com http: paths: - path: / backend: serviceName: nginx-service servicePort: 80 - host: tomcat.itheima.com http: paths: - path: / backend: serviceName: tomcat-service servicePort: 8080 # 创建
[rootmaster ~]# kubectl create -f ingress-http.yaml
ingress.extensions/ingress-http created # 查看
[rootmaster ~]# kubectl get ing ingress-http -n dev
NAME HOSTS ADDRESS PORTS AGE
ingress-http nginx.itheima.com,tomcat.itheima.com 80 22s # 查看详情
[rootmaster ~]# kubectl describe ing ingress-http -n dev
...
Rules:
Host Path backends
---- ---- --------
nginx.itheima.com / nginx-service:80(10.244.1.96:80,10.244.1.97:80,10.244.2.112.80)
tomcat.itheima.com / tomcat-service:8080(10.244.1.94:8080,10.244.1.95:8080,10.244.2.111.8080) # 接下来在本地电脑配置host文件解析上面的两个域名到192.168.109.100(master)上
# 然后就可以分别访问tomcat.itheima.com:32240 和nginx.itheima.com:32240 查看效果了 Https代理
创建证书 # 生成证书
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj /CCN/STBJ/LBJ/0nginx/CNitheima.com
# 创建密钥
kubectl create secret tls tls-secret --key tls.key --cert tls.crt 创建ingress-https.yaml 文件
apiVersion: extensions/v1beta1
kind: Ingress
metadata: name: ingress-https namespace: dev
spec: tls: - hosts: - nginx.itheima.com - tomcat.itheima.com secretName: tls-secret # 指定秘钥 rules: - host: nginx.itheima.com http: paths: - path: / backend: serviceName: nginx-service servicePort: 80 - host: tomcat.itheima.com http: paths: - path: / backend: serviceName: tomcat-service servicePort: 8080 # 创建 inress
[rootmaster ~]# kubectl create -f ingress-https.yaml
ingress.extensions/ingress-https created # 查看
[rootmaster ~]# kubectl get ing ingress-https -n dev
NAME HOSTS ADDRESS PORTS AGE
ingress-https nginx.itheima.com,tomcat.itheima.com 10.104.184.38 80, 443 2m42s # 查看详情
[rootmaster ~]# kubectl describe ing ingress-https -n dev
...
TLS: tls-secret terminates nginx.itheima.com,tomcat.itheima.com
Rules:
Host Path backends
---- ---- --------
nginx.itheima.com / nginx-service:80(10.244.1.97:80,10.244.1.98:80,10.244.2.119.80)
tomcat.itheima.com / tomcat-service:8080(10.244.1.99:8080,10.244.2.117:8080,10.244.2.120.8080) # 下面可以通过浏览器访问https://nginx.itheima.com:31335 和 https://tomcat.itheima.com:31335来查看了