一、定义
gateway和VirtualService的关系
gateway:定义了服务从外面怎么访问,在入口处对服务进行统一治理。
VirtualService:定义了匹配到的内部服务怎么流转。
二、gateway配置实例
含义:外部通过80端口访问网格内的服务
gateway的配置如图:
配合gateway的使用,修改VirtualService,在host上匹配gateway上请求的主机名,并通过gateways字段关联定义的gateway对象。
VirtualService的定义如图
三、gateway规则定义
gateway主要包含两个关键字段
1)selector
必选字段,通过该标签找到执行gateway规则的envoy。
2)server
必选字段,表示开放的服务列表,gateway的关键内容信息,是一个数组,每个元素都是server类型。
server的描述字段包括:
1)port
必选,描述对外开放的端口
2)hosts
必选,gateway对外发布的地址,FQDN域名,支持左侧通配符来进行模糊匹配。
3)defaultEndpoint
是 Istio 1.1 新增的属性,表示流量转发的默认后端,可以是一个loopback的后 端,也可以是UNIX的域套接字。
4)tls:在实际使用中考虑到安全问题,相关配置如下
◎ httpsRedirect:是否要做HTTP重定向,在这个布尔属性启用时,负载均衡器会给所有HTTP连接都 发送一个301的重定向,要求使用HTTPS。
◎ mode:在配置的外部端口上使用TLS模式时,可以取PASSTHROUGH、SIMPLE、MUTUAL、 AUTO_PASSTHROUGH这4种模式。
◎ serverCertificate:服务端证书的路径。当模式是SIMPLE和MUTUAL时必须指定,配置在单向和双 向认证场景下用到的服务端证书。
◎ privateKey:服务端密钥的路径。当模式是SIMPLE和MUTUAL时必须指定,配置在单向和双向认 证场景下用到的服务端私钥。
◎ caCertificates:CA 证书路径。当模式是 MUTUAL 时指定,在双向认证场景下配置在Gateway上验 证客户端的证书。
◎ credentialName:Istio 1.1 的新特性,用于唯一标识服务端证书和密钥。Gateway使用 credentialName从远端的凭据存储(如 Kubernetes的 Secrets)中获取证书和密钥,而不是使用Mount的文 件。
◎ subjectAltNames:SAN 列表。SubjectAltName 允许一个证书指定多个域名,在Gateways上可以用 来验证客户端提供的证书中的主题标识。
◎ minProtocolVersion:TLS协议的最小版本。
◎ maxProtocolVersion:TLS协议的最大版本。
◎ cipherSuites:指定的加密套件,默认使用Envoy支持的加密套件
四、gateway的典型应用
1.将网格内的HTTP服务发布为HTTP外部访问,即3.4.1 节的配置示例。
外部服务通过域名http://weather.com访问到应用的入口服务frontend。VirtualService本身定义了 frontend服务从内部和外部访问同样的路由规则,即根据内容的不同,将请求路由到v2版本或v1版本。注意,这里Gateway的协议是HTTP。
2.将网格内的HTTPS服务发布为HTTPS外部访问
这种场景的Gateway配置,重点是:端口为443,协议为HTTPS,TLS模式为 PASSTHROUGH,表示Gateway只透传应用程序提供的HTTPS内容。在本示例中,frontend 入口服务自身是HTTPS类型的服务,TLS需要的服务端证书、密钥等都是由frontend服务自己维护的。
如图所示
3、将网格内的HTTP服务发布为HTTPS外部访问
场景:服务吱声是Http,网格外部通过https访问该服务。
如图
配置Gateway如下,可以看到端口为443,协议为HTTPS。与前一种场景的入口服务自身为 HTTPS不同,这里的TLS模式是SIMPLE,表示Gateway提供标准的单向TLS认证。这时需要通过 serverCertificate和 privateKey提供服务端证书密钥。从图 3-55也可以看到 TLS 认证的服务端是在入口的 Envoy 上创建的,入口服务 frontend 本身保持原有的HTTP方式:
配置如图:
该方式既灵活又满足安全的要求,所以是一种推荐的方式。
4.将网格内的HTTP服务发布为双向HTTPS外部访问
5.将网格内的HTTP服务发布为HTTPS外部访问和HTTPS内部访问