Skip to content
AgentScope Java v1.0 重磅发布Know more

Nacos 融合Istio 下发xDS协议

Istio 指南

支持了 xDS 协议中的 CDS、EDS 服务,并为 EDS 以及 MCP 实现了增量推送。用户可以使用 Envoy 或其他支持 xDS 协议的客户端与 Nacos 进行对接,实现服务发现功能。

配置

服务端

对于发行包,修改 nacos/conf/application.properties 中的 nacos.istio.mcp.server.enablednacos.extension.naming.istio.enabled 为 true;

对于源码,修改 nacos/distribution/conf/application.properties 中的 nacos.istio.mcp.server.enablednacos.extension.naming.istio.enabled 为 true 。

若要使用 MCP 增量服务,除上述配置需修改外,还需修改 nacos/istio/misc/IstioConfig 中的 nacos.istio.server.full 为 false。

客户端

关于客户端,下面示例中使用的是 Envoy,可直接下载 Envoy 或创建镜像并将下述配置文件进行挂载即可。

Config:其中使用的端口号根据需求可自行更改

node:
cluster: test-cluster
id: test-idn
admin:
address:
socket_address: { address: 0.0.0.0, port_value: 15000 }
dynamic_resources:
ads_config:
api_type: GRPC
transport_api_version: V3
grpc_services:
- envoy_grpc:
cluster_name: nacos_xds
cds_config:
ads: { }
lds_config:
path: /etc/envoy/lds.yaml
# ads: {}
static_resources:
clusters:
- type: STATIC
connect_timeout: 1s
typed_extension_protocol_options:
envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
"@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
explicit_http_config:
http2_protocol_options: { }
name: nacos_xds
load_assignment:
cluster_name: nacos_xds
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 18848

lds:对于监听的服务获取 CDS 后会主动向服务端获取 EDS,监听的服务可自行更改

resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
name: listener_0
address:
socket_address: { address: 0.0.0.0, port_value: 80 }
# listener_filters:
# - name: "envoy.filters.listener.tls_inspector"
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
access_log:
- name: envoy.access_loggers.stdout
typed_config:
"@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog
codec_type: AUTO
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: [ "*" ]
routes:
- match: { prefix: "/" }
name: test
route:
cluster: outbound|8071||service-provider.DEFAULT-GROUP.e77d7925-1c90-4fa9-93cb-83153a099636.nacos
http_filters:
- name: envoy.filters.http.router

运行

注:同一服务下的各个实例使用的协议需一致,EDS 默认使用增量推送。

  1. 部署 Nacos,部署参考

  2. 按上述要求修改配置;

  3. 启动服务器,详细的启动命令可在上述部署参考中查看;

    Terminal window
    bash startup.sh -m standalone -p embedded
  4. 启动客户端。

    Terminal window
    docker start envoy

CDS 示例

注:日志在 nacos/logs/istio-main.log 查看

示例中注册的服务配置如下,示例参考

server.port=8071
spring.application.name=service-provider
spring.cloud.nacos.discovery.namespace=e77d7925-1c90-4fa9-93cb-83153a099636
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

CDS

EDS 示例

服务配置如上

EDS

全量 CDS 示例

现注册两个服务,其配置分别如下:

#service-provider
server.port=8071
spring.application.name=service-provider
spring.cloud.nacos.discovery.namespace=e77d7925-1c90-4fa9-93cb-83153a099636
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#service-consumer
server.port=8080
spring.application.name=service-consumer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

在控制台仅修改 service-consumer 服务配置,推送如下:

Full CDS

增量 EDS 示例

在控制台仅修改 service-consumer 实例配置,推送如下:

Incremental EDS