写点什么

基于 Istio + Envoy 的 dubbo-go Proxy Mesh

作者:apache/dubbo-go
  • 2022-11-10
    北京
  • 本文字数:1696 字

    阅读完需:约 6 分钟

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


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



<h2 id="target">1 总体目标</h2>


  • 部署 dubbo-go 应用到 Kubernetes

  • Istio 自动注入 Envoy 并实现流量拦截

  • 基于 Istio 规则进行流量治理


<h2 id="basic">2 基本流程与工作原理</h2>这个示例演示了如何将 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. 优化并配置健康检查流程


<h2 id="detail">3 详细步骤</h2>


<h3 id="env">3.1 环境要求</h3>


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



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


minikube start
复制代码


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


kubectl cluster-info
复制代码


<h3 id="prepare">3.2 前置条件</h3>


通过以下命令为示例项目创建独立的 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
复制代码


<h3 id="deploy">3.3 部署到 Kubernetes</h3>


<h4 id="deploy_provider">3.3.1 部署 Provider</h3>


# 部署 Servicekubectl apply -f https://raw.githubusercontent.com/apache/dubbo-go-samples/mesh-proxy-demo/mesh/deploy/provider/Service.yml
# 部署 Deploymentkubectl 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 容器实例。


<h4 id="deploy_consumer">3.3.2 部署 Consumer</h3>


# 部署 Servicekubectl apply -f https://raw.githubusercontent.com/apache/dubbo-go-samples/mesh-proxy-demo/mesh/deploy/consumer/Service.yml
# 部署 Deploymentkubectl 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
复制代码


<h3 id="check">3.4 检查 Provider 和 Consumer 正常通信</h3>


继执行 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


<h3 id="traffic">3.5 Istio 流量治理</h3>参考 Java 版本对应 demo

查看 dashboard

Istio 官网查看 如何启动 dashboard


关注社区


发布于: 刚刚阅读数: 4
用户头像

dubbogo社区 2019-08-25 加入

dubbogo社区官方账号,发布 github.com/apache/dubbo-go 各种最新技术趋势、项目实战和最新版本特性等技术干货。

评论

发布
暂无评论
基于 Istio + Envoy 的 dubbo-go Proxy Mesh_dubbo_apache/dubbo-go_InfoQ写作社区