概述
在服务网格内部服务需要访问的外部的场景下,可以使用服务条目(ServiceEntry)定义外部服务的访问信息,这样网格内的服务也可以访问外部的服务。服务条目描述了服务的域名、协议、端口、节点列表等信息,定义服务条目时,需要注意端口不要与sidecar的端口冲突。
端口与服务条目
当前sidecar占用端口:
端口 | 协议 | 说明 |
---|---|---|
15000 | TCP | sidecar管理端口。 |
15001 | TCP | outbound代理端口。 |
15004 | HTTP | debug端口。 |
15006 | TCP | inbound代理端口。 |
15008 | TCP | HBONE mTLS隧道端口。 |
15009 | H2C | HBONE安全网络端口。 |
15020 | HTTP | 合并的指标采集端口。 |
15021 | HTTP | 健康检查端口。 |
15053 | DNS | DNS端口。 |
15090 | HTTP | envoy指标采集端口。 |
18181 | HTTP | opa策略管理端口。 |
18282 | TCP | opa sidecar健康检查端口。 |
19191 | GRPC | opa授权检查端口。 |
通过集群与工作负载菜单下的服务条目可以管理网格内的外部服务;当前提供了三种模板用于创建服务条目,如下图:
访问网格外部的www.ctyun.cn服务可以按照下面的配置:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: external-svc-https # Name for this ServiceEntry.
spec:
hosts: # External services that mesh can access.
- www.ctyun.cn
location: MESH_EXTERNAL #
Location can be MEST_EXTERNAL or MESH_INTERNAL.
ports: #
- number: 443
name: https
protocol: TLS # Access external
services over TLS.
resolution: DNS # Resolve
external services' IP address by DNS.
如果我们在虚机上部署了一组MongoDB的实例,但是并没有注册到网格上,可以按照如下的配置在网格内访问MongoDB:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name:
external-svc-mongocluster # Name for this ServiceEntry.
spec:
hosts:
- mymongodb.somedomain # Not
used.
addresses:
- 192.192.192.192/24 # VIPs
ports:
- number: 27018
name: mongodb
protocol: MONGO
location: MESH_ EXTERNAL #
Location can be MEST_EXTERNAL or MESH_INTERNAL.
resolution: STATIC # Access
service by endpoints' static IP address.
endpoints:
- address: 2.2.2.2
- address: 3.3.3.3
注意服务条目里面的端口协议必须是HTTP|HTTPS|GRPC|HTTP2|MONGO|TCP|TLS里面的值。