首页 > 解决方案 > 使用 Consul 配置 Istio-Envoy

问题描述

我正在尝试使用 Istio 构建服务网格。目前,我有一个 Docker-Compose,其中有两个 REST 服务和一个边车(Envoy)。如果您向 serviceA 发送 HTTP 请求,它将被转发到 serviceB,后者返回结果。它工作正常。由于尚未实现控制平面,因此使用 Envoy 配置实现了“网格”。配置文件如下所示:

服务A:

static_resources:
  listeners:
  - address:
      socket_address:
        address: 0.0.0.0
        port_value: 80
  filter_chains:
  - filters:
    - name: envoy.http_connection_manager
      config:
        codec_type: auto
        stat_prefix: ingress_http
        route_config:
          name: local_route
          virtual_hosts:
          - name: service
            domains:
            - "*"
            routes:
            - match:
                prefix: "/abc"
              route:
                prefix_rewrite: "/v1/abc"
                host_rewrite: serviceB
                cluster: service_ner
        http_filters:
        - name: envoy.router
          config: {}
  clusters:
  - name: service_abc
    connect_timeout: 0.25s
    type: logical_dns
    dns_lookup_family: V4_ONLY
    lb_policy: round_robin
    hosts:
    - socket_address:
        address: serviceB
        port_value: 80
admin:
  access_log_path: "/dev/null"
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 8081

服务乙:

static_resources:
  listeners:
  - address:
  socket_address:
    address: 0.0.0.0
    port_value: 80
  filter_chains:
  - filters:
    - name: envoy.http_connection_manager
      config:
        codec_type: auto
        stat_prefix: ingress_http
        route_config:
          name: local_route
          virtual_hosts:
          - name: service
            domains:
            - "*"
            routes:
            - match:
                prefix: "/"
              route:
                cluster: local_service
        http_filters:
        - name: envoy.router
          config: {}
  clusters:
  - name: local_service
    connect_timeout: 0.25s
    type: strict_dns
    lb_policy: round_robin
    hosts:
    - socket_address:
        address: 127.0.0.1
        port_value: 5001
admin:
  access_log_path: "/dev/null"
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 8081

现在我想将 Istio 实现为控制平面,并尝试使用 Istio-Pilot 替换部分配置。是否可以通过实现 Istio-route 规则来覆盖 Envoy 配置文件中的路由规则?例如:

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  name: ruleSerA
spec:
  destination:
    name: serviceA
  precedence: 2
  route:
  - labels:
      version: v1
---
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  name: ruleSerB
spec:
  destination:
    name: serviceB
  precedence: 2
  match:
    request:
      headers:
        uri:
          prefix: /abc
  rewrite:
    uri: /v1/abc
  route:
  - labels:
      version: v1

我还需要配置什么来连接数据平面和服务平面?到目前为止,Istio 路由规则根本不会影响服务。

最好的问候,马丁

标签: microservicesmeshconsulistioenvoyproxy

解决方案


推荐阅读