网站开发展示,怎么用网络推广,网络品牌营销推广途径,网站开发国内现状首先附上K8S版本及Ingress版本对照 Ingress介绍
NotePort#xff1a;该方式的缺点是会占用很多集群机器的端口#xff0c;当集群服务变多时#xff0c;这个缺点就愈发的明显(srevice变多#xff0c;需要的端口就需要多)
LoadBalancer#xff1a;该方式的缺点是每个servi…首先附上K8S版本及Ingress版本对照 Ingress介绍
NotePort该方式的缺点是会占用很多集群机器的端口当集群服务变多时这个缺点就愈发的明显(srevice变多需要的端口就需要多)
LoadBalancer该方式的缺点是每个service都需要一个外部负载均衡设备的支持才可以
基于这种现状k8s提供了ingress资源对象。
ingress只需要一个NodePort/一个负载均衡设备就可以满足暴露多个service的需求
实际上Ingress相当于一个7层的负载均衡器在生产环境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等是k8s对反向代理的一个抽象它的工作原理类似于Nginx可以理解成Ingress里建立诸多映射规则Ingress Colltroller通过监听这些配置规则并转化成Nginx的反向代理配置然后对外部提供服务在这里有两个核心理念
- Ingressk8s中的一个对象作用是定义请求如何转发到service的规则定义转发规则- Ingress controller具体实现反向代理及负载均衡的程序对Ingress定义的规则进行解析。
根据配置的规则来实现请求转发实现方式有很多比如NginxContourHaproxy等等
Ingress的工作原理
ingress-controller通过和 kubernetes APIServer 交互动态的去感知集群中ingress规则变化
然后读取它按照自定义的规则规则就是写明了哪个域名对应哪个service生成一段nginx配置
再写到nginx-ingress-controller的pod里这个ingress-controller的pod里运行着一个Nginx服务控制器会把生成的 nginx配置写入 /etc/nginx.conf文件中
然后reload一下使配置生效。以此达到域名区分配置和动态更新的作用。
kubernetes ingress-nginx部署
我这里的K8S版本为1.23.5对应的安装ingress-nginx-1.6.4;
下载对应部署文件deploy.yaml(这一步需要魔法没有的可以从下链接提取)
同时为了方便后续http和https的分辨固定端口为31080和31443
未修改版本
https://pan.baidu.com/s/1FJ3ai_5YQYypKi72HhpGqg?pwdweiy 提取码weiy
已修改版本
https://pan.baidu.com/s/1CF5UJ8aQy-IDvpv9r2RYuQ?pwdweiy 提取码weiy 注意80对应的是HTTP端口443对应的是HTTPS端口 部署文件上传后需要注意切换为国内镜像地址修改成国内可以下载的相同镜像 一共需要修改三处镜像
具体修改如下 image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20220916-gd32f8c343sha256:39c5b2e3310dc4264d638ad28d9d1d96c4cbb2b2dcfb52368fe4e3c63f61e10f 将其改为
dyrnq/kube-webhook-certgen:v20220916-gd32f8c343 image: registry.k8s.io/ingress-nginx/controller:v1.6.4sha256:15be4666c53052484dd2992efacf2f50ea77a78ae8aa21ccd91af6baaa7ea22f 将其修改为
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.6.4
部署Ingress
[rootmaster ~]# mkdir /ingress-controller
[rootmaster ~]# cd /ingress-controller
[rootmaster ~]# ls [rootmaster ingress-controller]# kubectl apply -f ./ 正常为created我先前已经apply
1、查看ns会有一个ingress-nginx的名称空间产生 2、查看ingress-nginx名称空间的pod
[rootmaster ingress-controller]# kubectl get po -n ingress-nginx 3、查看service
[rootmaster ingress-controller]# kubectl get svc -n ingress-nginx 4、部署tomcat与nginx的pod通过tomcat-nginx.yml文件创建
[rootk8s-master ~]# cattomcat-nginx.yml EOF
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentnamespace: dev
spec:replicas: 1selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.18ports:- containerPort: 80nodeName: node2
---
apiVersion: apps/v1
kind: Deployment
metadata:name: tomcat-deploymentnamespace: dev
spec:replicas: 1selector:matchLabels:app: tomcat-podtemplate:metadata:labels:app: tomcat-podspec:containers:- name: tomcatimage: tomcat:8.5-jre10-slimports:- containerPort: 8080nodeName: node2
---
apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: dev
spec:ports:- port: 80name: nginxclusterIP: Noneselector:app: nginx-pod
---
apiVersion: v1
kind: Service
metadata:name: tomcat-servicenamespace: dev
spec:selector:app: tomcat-podtype: ClusterIPports:- protocol: TCPport: 80targetPort: 8080
EOF
这里我固定了调度的node为node2
5、创建svc与pod
[rootmaster ~]# kubectl create -f tomcat-nginx.yml 6、查看svc信息
[rootmaster ~]# kubectl get svc -n dev 7、查看pod信息
[rootmaster ~]# kubectl get po -n dev Ingress-HTTP代理
通过ingress代理http服务创建ingress-http.yml
[rootmaster ~]# vim ingress-http.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-httpnamespace: dev
spec:ingressClassName: nginxrules:- host: www.nginx.comhttp: #访问的方式是以http的形式paths:- backend:service:name: nginx-service #用户在访问域名的时候会反向代理给service也就是后面的podservice是通过标签去代理的port: number: 80path: /pathType: ImplementationSpecific- host: www.tomcat.comhttp:paths:- backend:service:name: tomcat-serviceport: number: 80path: /pathType: ImplementationSpecific
1、创建ingress
[rootmaster ~]# kubectl create -f ingress-http.yml
2、查看ingress信息
[rootmaster ~]# kubectl get ing ingress-http -n dev
3、查看详细描述
[rootmaster ~]# kubectl describe ing ingress-http -n dev 测试HTTP代理 浏览器访问由于域名无法正常解析需要在windows内进行解析 C:\Windows\System32\drivers\etc
添加解析