集群外服务用于将网格外的服务添加到网格内部维护的服务注册表中,描述了服务的域名、端口、协议、端点等信息,以便网格内的服务可以访问到网格外的服务。本文介绍如何创建、修改和删除集群外服务。
注意事项
为了避免与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解析。
创建集群外服务
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 ,然后单击使用YAML创建。
在创建页面,选择命名空间和场景模版,在YAML文本框按需修改配置信息,然后单击创建。
关于字段的说明,请参见集群外服务(Service Entry)CRD说明。
修改集群外服务
在网格详情页面左侧导航栏,选择 。
在集群外服务(ServiceEntry)页面的操作列,单击目标集群外服务对应的查看YAML。
在编辑对话框,修改集群外服务配置信息,然后单击确定。
删除集群外服务
在网格详情页面左侧导航栏,选择
。在集群外服务(ServiceEntry)页面的操作列,单击目标集群外服务对应的删除。
在确认对话框,单击确定。