istio系列:第五章-ServiceEntry内到外的通讯配置
在isito中,我们一般都是通过服务名去注册中心寻找服务,原理类似于springcloud中的nacos。对于服务注册一般都是采用自动发现与注册的方式,但是istio提供了ServiceEntry资源让我们可以手动对服务进行注册。
在这里我们想到了一个问题就是那可不可以将外部服务也注册到istio中去哪?答案是可以。
接下来就让我们了解一下ServiceEntry的各个属性
type ServiceEntry struct {
Hosts []string
Addresses []string
Ports []*Port
Location ServiceEntry_Location
Resolution ServiceEntry_Resolution
Endpoints []*WorkloadEntry
WorkloadSelector *WorkloadSelector
ExportTo []string
SubjectAltNames []string
}
Hosts
定义服务名称,供VirtualServices 和 DestinationRules 中使用
对于 HTTP 流量,HTTP Host/Authority 标头将与 hosts 字段匹配,这时候resolution如果为DNS,address为空则进行DNS解析的工作.
Addresses
表示与服务关联的虚拟IP地址,可以是CIDR这种前缀表达式。可以通过该IP地址访问该服务.
当我们开始智能DNS后address是DNS的虚拟ip地址.具体请访问智能DNS
Ports
与外部服务关联的端口
type Port struct {
// 监听端口
Number uint32
// 适应协议
Protocol string
// 端口名称
Name string
// 流量所在端点的端口号
TargetPort uint32
}
Location
指定服务是否应被视为网格外部,标识服务属于外部服务还是内部服务。如果是外部服务mTls双向认证会被禁用
const (
// 外部服务
ServiceEntry_MESH_EXTERNAL ServiceEntry_Location = 0
// 内部服务
ServiceEntry_MESH_INTERNAL ServiceEntry_Location = 1
)
Resolution
服务发现的模式,用来设置代理解析服务的方式,将一个服务名解析到一个后端IP地址上
const (
// 用于当连接的目标地址已经是一个明确 IP 的场景
ServiceEntry_NONE ServiceEntry_Resolution = 0
// 用在已经用endpoints设置了服务实例的地址场景中,即不用解析。
ServiceEntry_STATIC ServiceEntry_Resolution = 1
// 用查询环境中的DNS进行解析
ServiceEntry_DNS ServiceEntry_Resolution = 2
ServiceEntry_DNS_ROUND_ROBIN ServiceEntry_Resolution = 3
)
Endpoints
配置目的地址的IP、端口号等信息
type WorkloadEntry struct {
Address string
Ports map[string]uint32
Labels map[string]string
Network string
Locality string
Weight uint32
ServiceAccount string
}
Address
必选字段,表示网络后端的地址。在前面 ServiceEntry 的解析方式中resolution 被设置为DNS时,address可以使用域名,但要求是明确的地址,不可以使用模糊匹配。
Ports
端口列表
Labels
后端的标签
Network
高级配置主要用在Istio多集群中。所有属于相同network的后端都可以直接互访,不在同一个 network 的后端不能直接访问。在使用 Istio Gateway时可以对不同network的后端建立连接
Locality
后端的locality,主要用于亲和性路由。即Envoy可以基于这个标识做本地化路由,优先路由到本地的后端上。locality表示一个故障域,常见的如国家、地区、区域,也可以分割每个故障域来表
示任意层次的结构
Weight
负载均衡的权重,权重越高,接收的流量占比越大。
WorkloadSelector
过滤工作负载,仅适用于内网服务。
ExportTo
命名空间的限制,如果没有配置则对所有的命名空间都有效
SubjectAltNames
表示这个服务负载的SAN列表