基于 Istio + Envoy 的 dubbo-go Proxy Mesh
  FMlAAiS9UagI 2023年11月02日 74 0

from ​​https://github.com/apache/dubbo-go-samples/tree/master/mesh​

可以按照下文步骤,将 Demo 部署到本地集群。

  • ​​1 总体目标​​
  • ​​2 基本流程​​
  • ​3 详细步骤​
  • ​​3.1 环境要求​​
  • ​​3.2 前置条件​​
  • ​3.3 部署到 Kubernetes​
  • ​​3.3.1 部署 Provider​​
  • ​​3.3.2 部署 Consumer​​
  • ​​3.4 检查 Provider 和 Consumer 正常通信​​
  • ​​3.5 Istio 流量治理​​

1 总体目标

  • 部署 dubbo-go 应用到 Kubernetes
  • Istio 自动注入 Envoy 并实现流量拦截
  • 基于 Istio 规则进行流量治理

2 基本流程与工作原理

这个示例演示了如何将 dubbo-go 开发的应用部署在 Istio 体系下,以实现 Envoy 对 Dubbo 服务的自动代理,示例总体架构如下图所示。

​​thinsdk​​

完成示例将需要的步骤如下:

  1. 创建一个 dubbo-go 应用,可直接使用( ​​dubbo-go-samples​​ )
  2. 构建容器镜像并推送到镜像仓库,可直接使用 (​​本示例官方镜像​​)
  3. 分别部署 dubbo-go Provider 与 dubbo-go Consumer 到 Kubernetes 并验证 Envoy 代理注入成功
  4. 验证 Envoy 发现服务地址、正常拦截 RPC 流量并实现负载均衡
  5. 优化并配置健康检查流程

3 详细步骤

3.1 环境要求

请确保本地安装如下环境,以提供容器运行时、Kubernetes集群及访问工具

通过以下命令启动本地 Kubernetes 集群

minikube start

通过 kubectl 检查集群正常运行,且 kubectl 绑定到默认本地集群

kubectl cluster-info

3.2 前置条件

通过以下命令为示例项目创建独立的 Namespace ​​dubbo-demo​​,同时开启 sidecar 自动注入。

# 初始化命名空间并开启sidecar自动注入
kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-go-samples/mesh-proxy-demo/mesh/deploy/Namespace.yml

# 切换命名空间
kubens dubbo-demo

3.3 部署到 Kubernetes

3.3.1 部署 Provider

# 部署 Service
kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-go-samples/mesh-proxy-demo/mesh/deploy/provider/Service.yml

# 部署 Deployment
kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-go-samples/mesh-proxy-demo/mesh/deploy/provider/Deployment.yml

以上命令创建了一个名为 ​​server-demo​​ 的 Service,注意这里的 service name 与项目中的 dubbo 应用名是一样的。

接着 Deployment 部署了一个 2 副本的 pod 实例,至此 Provider 启动完成。

可以通过如下命令检查启动日志。

# 查看 pod 列表
kubectl get pods -l app=server-demo

# 查看 pod 部署日志
kubectl logs your-pod-id

这时 pod 中应该有一个 dubbo provider 容器实例,同时还有一个 Envoy Sidecar 容器实例。

3.3.2 部署 Consumer

# 部署 Service
kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-go-samples/mesh-proxy-demo/mesh/deploy/consumer/Service.yml

# 部署 Deployment
kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-go-samples/mesh-proxy-demo/mesh/deploy/consumer/Deployment.yml

部署 consumer 与 provider 是一样的,这里也保持了 K8S Service 与 Dubbo consumer application name(在 ​​dubbogo.yml​​ 中定义) 一致

dubbo:
application:
name: server-demo

​Dubbo Consumer 服务声明​​中还指定了要消费的 Provider 服务(应用)名

consumer:
mesh-enable: true
references:
GreeterClientImpl:
protocol: tri
provided_by: server-demo

3.4 检查 Provider 和 Consumer 正常通信

继执行 3.3 步骤后, 检查启动日志,查看 consumer 完成对 provider 服务的消费。

# 查看 pod 列表
kubectl get pods -l app=client-demo

# 查看 pod 部署日志
kubectl logs your-pod-id

# 查看 pod isitio-proxy 日志
kubectl logs your-pod-id -c istio-proxy

具体日志情况可参考 ​​Java 版本对应 demo​

3.5 Istio 流量治理

参考 ​​Java 版本对应 demo​

查看 dashboard

Istio 官网查看 ​​如何启动 dashboard​​。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  IjoZzDAdQBm4   2023年11月12日   31   0   0 apache禅道
  Fo7woytj0C0D   2023年12月23日   31   0   0 pythonsedidepythonidesed
FMlAAiS9UagI