做网站的项目流程,公司规划发展计划书,网站备案 假通信地址,环球贸易网的服务内容istio-01.png 背景 终于进入大家都比较感兴趣的服务网格系列了#xff0c;在前面已经讲解了#xff1a; 如何部署应用到 kubernetes服务之间如何调用如何通过域名访问我们的服务如何使用 kubernetes 自带的配置 ConfigMap 基本上已经够我们开发一般规模的 web 应用了#xf… istio-01.png 背景 终于进入大家都比较感兴趣的服务网格系列了在前面已经讲解了 如何部署应用到 kubernetes服务之间如何调用如何通过域名访问我们的服务如何使用 kubernetes 自带的配置 ConfigMap 基本上已经够我们开发一般规模的 web 应用了但在企业中往往有着复杂的应用调用关系应用与应用之间的请求也需要进行管理。比如常见的限流、降级、trace、监控、负载均衡等功能。 在我们使用 kubernetes 之前往往都是由微服务框架来解决这些问题比如 Dubbo、SpringCloud 都有对应的功能。 但当我们上了 kubernetes 之后这些事情就应该交给一个专门的云原生组件来解决也就是本次会讲到的 Istio它是目前使用最为广泛的服务网格解决方案。 官方对于 Istio 的解释比较简洁落到具体的功能点也就是刚才提到的 限流降级路由转发、负载均衡入口网关、TLS安全认证灰度发布等 image.png 再结合官方的架构图可知Istio 分为控制面 control plane 和数据面 data plane。 控制面可以理解为 Istio 自身的管理功能 比如服务注册发现管理配置数据面所需要的网络规则等 而数据面可以简单的把他理解为由 Envoy 代理的我们的业务应用我们应用中所有的流量进出都会经过 Envoy 代理。 所以它可以实现负载均衡、熔断保护、认证授权等功能。 安装 首先安装 Istio 命令行工具 这里的前提是有一个 kubernetes 运行环境 Linux 使用 curl -L https://istio.io/downloadIstio | sh - Mac 可以使用 brew brew install istioctl 其他环境可以下载 Istio 后配置环境变量 export PATH$PWD/bin:$PATH 之后我们可以使用 install 命令安装控制面。 这里默认使用的是 kubectl 所配置的 kubernetes 集群 istioctl install --set profiledemo -y 这个的 profile 还有以下不同的值为了演示我们使用 demo 即可。 使用 # 开启 default 命名空间自动注入
$ k label namespace default istio-injectionenabled$ k describe ns default
Name: default
Labels: istio-injectionenabledkubernetes.io/metadata.namedefault
Annotations: none
Status: Active
No resource quota.
No LimitRange resource. 之后我们为 namespace 打上 label使得 Istio 控制面知道哪个 namespace 下的 Pod 会自动注入 sidecar。 这里我们为 default 这个命名空间打开自动注入 sidecar然后在这里部署我们之前使用到的 deployment-istio.yaml $ k apply -f deployment/deployment-istio.yaml$ k get pod
NAME READY STATUS RESTARTS
k8s-combat-service-5bfd78856f-8zjjf 2/2 Running 0
k8s-combat-service-5bfd78856f-mblqd 2/2 Running 0
k8s-combat-service-5bfd78856f-wlc8z 2/2 Running 0 此时会看到每个Pod 有两个 container其中一个就是 istio-proxy sidecar也就是之前做 gRPC 负载均衡测试时的代码。 还是进行负载均衡测试效果是一样的说明 Istio 起作用了。 此时我们再观察 sidecar 的日志时会看到刚才我们所发出和接受到的流量 $ k logs -f k8s-combat-service-5bfd78856f-wlc8z -c istio-proxy[2023-10-31T14:52:14.279Z] POST /helloworld.Greeter/SayHello HTTP/2 200 - via_upstream - - 12 61 14 9 - grpc-go/1.58.3 6d293d32-af96-9f87-a8e4-6665632f7236 k8s-combat-service:50051 172.17.0.9:50051 inbound|50051|| 127.0.0.6:42051 172.17.0.9:50051 172.17.0.9:40804 outbound_.50051_._.k8s-combat-service.default.svc.cluster.local default
[2023-10-31T14:52:14.246Z] POST /helloworld.Greeter/SayHello HTTP/2 200 - via_upstream - - 12 61 58 39 - grpc-go/1.58.3 6d293d32-af96-9f87-a8e4-6665632f7236 k8s-combat-service:50051 172.17.0.9:50051 outbound|50051||k8s-combat-service.default.svc.cluster.local 172.17.0.9:40804 10.101.204.13:50051 172.17.0.9:54012 - default
[2023-10-31T14:52:15.659Z] POST /helloworld.Greeter/SayHello HTTP/2 200 - via_upstream - - 12 61 35 34 - grpc-go/1.58.3 ed8ab4f2-384d-98da-81b7-d4466eaf0207 k8s-combat-service:50051 172.17.0.10:50051 outbound|50051||k8s-combat-service.default.svc.cluster.local 172.17.0.9:39800 10.101.204.13:50051 172.17.0.9:54012 - default
[2023-10-31T14:52:16.524Z] POST /helloworld.Greeter/SayHello HTTP/2 200 - via_upstream - - 12 61 28 26 - grpc-go/1.58.3 67a22028-dfb3-92ca-aa23-573660b30dd4 k8s-combat-service:50051 172.17.0.8:50051 outbound|50051||k8s-combat-service.default.svc.cluster.local 172.17.0.9:44580 10.101.204.13:50051 172.17.0.9:54012 - default
[2023-10-31T14:52:16.680Z] POST /helloworld.Greeter/SayHello HTTP/2 200 - via_upstream - - 12 61 2 2 - grpc-go/1.58.3 b4761d9f-7e4c-9f2c-b06f-64a028faa5bc k8s-combat-service:50051 172.17.0.10:50051 outbound|50051||k8s-combat-service.default.svc.cluster.local 172.17.0.9:39800 10.101.204.13:50051 172.17.0.9:54012 - default 总结 本期的内容比较简单主要和安装配置相关下一期更新如何配置内部服务调用的超时、限流等功能。 其实目前大部分操作都是偏运维的即便是后续的超时配置等功能都只是编写 yaml 资源。 但在生产使用时我们会给开发者提供一个管理台的可视化页面可供他们自己灵活配置这些原本需要在 yaml 中配置的功能。 其实各大云平台厂商都有提供类似的能力比如阿里云的 EDAS 等。 本文的所有源码在这里可以访问https://github.com/crossoverJie/k8s-combat 往期推荐 如何优雅重启 kubernetes 的 Pod 在 kubernetes 环境中实现 gRPC 负载均衡 五分钟k8s入门到实战-应用配置 五分钟k8s实战-使用Ingress k8s入门到实战--跨服务调用 点分享 点收藏 点点赞 点在看