管理集群外服务

集群外服务用于将网格外的服务添加到网格内部维护的服务注册表中,描述了服务的域名、端口、协议、端点等信息,以便网格内的服务可以访问到网格外的服务。本文介绍如何创建、修改和删除集群外服务。

注意事项

  • 为了避免与Sidecar的端口发生冲突,创建集群外服务时请勿使用以下Envoy端口:

    端口

    协议

    使用者

    描述

    15000

    TCP

    Envoy

    Envoy管理端口。

    15001

    TCP

    Envoy

    Envoy出口流量的端口。

    15006

    TCP

    Envoy

    Envoy入口流量的端口。

    15020

    HTTP

    Envoy

    合并来自Istio代理、Envoy和应用程序的Prometheus遥测的端口。

    15021

    HTTP

    Envoy

    健康检查端口。

    15090

    HTTP

    Envoy

    Envoy Prometheus遥测的端口。

  • 在集群外服务中命名端口时必须遵循以下规则:

    协议

    端口名称

    带后缀的端口名称

    HTTP

    http

    http-<后缀>

    HTTP2

    http2

    http2-<后缀>

    HTTPS

    https

    https-<后缀>

    TLS

    tls

    tls-<后缀>

    gRPC

    grpc

    grpc-<后缀>

    TCP

    tcp

    tcp-<后缀>

    UDP

    UDP

    udp-<后缀>

    Mongo

    mongo

    mongo-<后缀>

    MySQL

    mysql

    mysql-<后缀>

    Redis

    redis

    redis-<后缀>

  • 使用HTTP、HTTPS、TLS和TCP协议时请注意以下事项:

    • 使用HTTP、HTTPS和TLS协议时,必须在集群外服务中指定主机。

      apiVersion: networking.istio.io/v1alpha3
      kind: ServiceEntry
      metadata:
        name: aliyun
      spec:
        hosts:
        - www.aliyun.com
        - aliyun.com
        ports:
        - number: 443
          name: https
          protocol: HTTPS
        resolution: DNS
        location: MESH_EXTERNAL
    • 使用TCP协议时,必须在集群外服务中指定IP范围。

      apiVersion: networking.istio.io/v1alpha3
      kind: ServiceEntry
      metadata:
        name: mysql-external
      spec:
        hosts:
        - mysql-01.foo.bar
        addresses:
        - 10.0.0.5/32
        - 10.0.0.6/32
        ports:
        - name: tcp
          number: 3306
          protocol: tcp
        location: MESH_EXTERNAL
  • 如果您有多个外部服务使用TCP协议共享同一个端口,请区分服务的IP地址。

    • 外部服务1

      apiVersion: networking.istio.io/v1beta1
      kind: ServiceEntry
      metadata:
        name: external-svc-1
        namespace: default
      spec:
        hosts:
        - fqdna.fqdn.com
        addresses:
        - 10.0.0.0
        location: MESH_EXTERNAL
        ports:
        - name: TCP
          number: 3306
          protocol: TCP
        resolution: DNS
    • 外部服务2

      apiVersion: networking.istio.io/v1beta1
      kind: ServiceEntry
      metadata:
        name: external-svc-2
        namespace: default
      spec:
        hosts:
        - fqdnb.fqdn.com
        addresses:
        - 10.1.0.0
        location: MESH_EXTERNAL
        ports:
        - name: TCP
          number: 3306
          protocol: TCP
        resolution: DNS
  • 默认情况下,使用集群外服务添加到网格的任何外部服务将可用于所有命名空间。如果您不希望其他istio-proxy访问外部服务,您可以在集群外服务中添加exportTo参数,将值设置为".",从而将外部服务的访问范围限定为仅创建集群外服务的命名空间。

    apiVersion: networking.istio.io/v1alpha3
    kind: ServiceEntry
    metadata:
      name: aliyun
    spec:
      hosts:
      - www.aliyun.com
      exportTo:
      - "."
      ports:
      - number: 443
        name: https
        protocol: HTTPS
      resolution: DNS
      location: MESH_EXTERNAL
  • 建议使用DNS解析。DNS解析将忽略原始目标IP地址并将流量定向到选定的主机,然后执行DNS查询以获取主机的IP地址。

    apiVersion: networking.istio.io/v1alpha3
    kind: ServiceEntry
    metadata:
      name: aliyun
    spec:
      hosts:
      - '*.aliyun.com'
      addresses:
       - 192.168.0.0
       - 172.16.0.0
      location: MESH_EXTERNAL
      ports:
      - number: 443
        protocol: https
        name: https
      resolution: DNS

    resolution:设置参数值为DNS,表示使用DNS解析;设置参数值为NONE,表示不使用DNS解析。

创建集群外服务

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择集群与工作负载管理 > 集群外服务(ServiceEntry),然后单击使用YAML创建

  3. 创建页面,选择命名空间场景模版,在YAML文本框按需修改配置信息,然后单击创建

    关于字段的说明,请参见集群外服务(Service Entry)CRD说明

修改集群外服务

  1. 在网格详情页面左侧导航栏,选择集群与工作负载管理 > 集群外服务(ServiceEntry)

  2. 集群外服务(ServiceEntry)页面的操作列,单击目标集群外服务对应的查看YAML

  3. 编辑对话框,修改集群外服务配置信息,然后单击确定

删除集群外服务

  1. 在网格详情页面左侧导航栏,选择集群与工作负载管理 > 集群外服务(ServiceEntry)

  2. 集群外服务(ServiceEntry)页面的操作列,单击目标集群外服务对应的删除

  3. 确认对话框,单击确定