linux怎么查看本机内存大小
258
2022-10-29
第四章 九析带你轻松完爆 service mesh - istio Gateway 设置路由
系列文章:总目录索引:九析带你轻松完爆 istio 服务网格系列教程
目录
1 流量管理
2 创建命名空间
3 资源文件准备
3.1 创建网关文件
3.2 创建虚拟服务文件
3.3 创建 k8s service 文件
3.4 创建 k8s deployment 文件:
3.5 修改 istio-ingressgateway deployment
4 尝试网关路由功能
4.1 确定 INGRESS_HOST
4.2 编辑浏览器所在主机 hosts 文件
4.3 访问 tomcat
5 小节
1 流量管理(traffic management)
如果你对博客有任何疑问,请告诉我。
istio 四大特性是流量管理(traffic management)、安全(security)、策略(policies)和遥测(observability)。
本节重点介绍 istio 流量管理。流量管理的本质是对网络流量的路由和控制。生活中经常有这样的例子,比如下雨塌方,交警会疏导新的交通路线,这便是路由;比如景区周末实行单双号限行,这便是流量控制。
在介绍流量管理之前,首先介绍一下网络流向,介绍一个 请求在安装了 istio 的 k8s 中都经过哪些点,有了这个介绍之后,再谈流量管理将是水到渠成的事情。
下图便是网络流向图:
当用户使用浏览器发起一个请求( )进入 k8s 中的 istio-ingressgateway,因为在 istio-ingressgateway 上设置了 istio 的 gateway,而且此 gateway 又绑定了 virtual service,在 virtual service 设置了 2 条路由规则,分别指向 tomcat 和 nginx 这 2 个 k8s service,而每个 service 又关联到各自的 pod,于是此请求最终可根据 url 触达到 pod 内的容器。
了解了请求流向的整个流程,下面介绍如何操作。前提是你已经安装好了 k8s 和 istio。关于如何安装和配置 istio,可以查看本人的系列文章第一章。
2 创建命名空间
kubectl create ns jiuxi
istio 默认安装在 jiuxi 这个命名空间下,并且设置在 jiuxi 命名空间自动注入 sidecar。相关操作请参考本人系列文章的第一章。
3 资源文件准备
从上图可知,共需要 4 个资源文件(yaml):
1 jiuxi-gateway.yaml2 jiuxi-virtual-svc.yaml3 jiuxi-svc.yaml( tomcat 和 nginx 的 service 写在一个文件)4 jiuxi-deploy.yaml(tomcat 和 nginx 的 deployment 写在一个文件)
3.1 创建网关文件
网关文件 jiuxi-gateway.yaml 文件内容如下:
apiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata: name: jiuxi-gateway namespace: jiuxispec: selector: istio: ingressgatewayservers:- hosts: - jiuxi.com port: number: 80 name: protocol: HTTP
创建资源:
kubectl apply -f jiuxi-gateway.yaml
3.2 创建虚拟服务文件
虚拟服务文件 jiuxi-virtual-svc.yaml 文件内容如下:
apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata: name: jiuxi-virtual-svc namespace: jiuxispec: gateways: - jiuxi-gateway hosts: - jiuxi.com route: - destination: host: tomcat-svc port: number: 8080 weight: 50 - destination: host: nginx-svc port: number: 80 weight: 50
创建资源:
kubectl apply -f jiuxi-virtual-svc.yaml
3.3 创建 k8s service 文件
服务文件 jiuxi-svc.yaml 文件内容如下:
apiVersion: v1kind: Servicemetadata: name: nginx-svc namespace: jiuxispec: ports: - name: port port: 80 protocol: TCP targetPort: 80 selector: app: nginx-pod---apiVersion: v1kind: Servicemetadata: name: tomcat-svc namespace: jiuxispec: ports: - name: port port: 8080 protocol: TCP targetPort: 8080 selector: app: tomcat-pod
创建资源:
kubectl apply -f jiuxi-svc.yaml
3.4 创建 k8s deployment 文件
jiuxi-deploy 文件内容如下:
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx-deploy name: nginx-deploy namespace: jiuxi spec: replicas: 1 selector: matchLabels: app: nginx-pod template: metadata: labels: app: nginx-pod spec: containers: - image: nginx:1.14-alpine imagePullPolicy: Always name: nginx ports: - containerPort: 80 name: port protocol: TCP --- apiVersion: apps/v1 kind: Deploymentmetadata: labels: app: tomcat-deploy name: tomcat-deploy namespace: jiuxi spec: replicas: 1 selector: matchLabels: app: tomcat-pod template: metadata: labels: app: tomcat-pod spec: containers: - image: docker.io/kubeguide/tomcat-app:v1 imagePullPolicy: Always name: tomcat ports: - containerPort: 8080 name: port protocol: TCP
创建资源:
kubectl apply -f jiuxi-deploy.yaml
3.5 修改 istio-ingressgateway deployment
这一步非常重要,因为默认情况下 istio-ingressgateway 对应的容器并没有暴露在服务网格之外,所以我们需要将其暴露出来。编辑 istio-system 命名空间下的 istio-ingressgateway deployment:
kubectl edit deployment -n istio-system istio-ingressgateway
4 尝试网关路由功能
4.1 确定 INGRESS_HOST
kubectl get pod -n istio-system -o wide
vim /etc/hosts # linuxc:/windows/system32/drivers/etc/hosts # windows
添加 DNS 记录:
10.110.101.205 jiuxi.com # 根据个人实际情况改写
4.3 访问 tomcat
浏览器输入 tomcat 和 nginx 服务去了,并且流量上基本达到了均分,各 50%。
5 小节
自此我们使用了 istio 的 gateway 和 virtual service 实现了流量管理的功能。下面我们还会继续庖丁解牛 istio 其他强大的特性。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~