应用服务网格

网关规则

2025-08-14 03:47:59

网关规则定义和配置应用服务网格中的入口或出口网关,控制着外部流量如何进入网格以及网格内访问外部,本文介绍如网关相关操作。

使用yaml创建网关规则

1. 登录应用网格控制台,单击应用网格实例列表中的网格名称。

2. 在左侧导航栏中,选择网关->网关规则。

3. 选择对应的命名空间后,点击创建网关规则按钮

4. 在创建页面选择场景模板,然后在yaml文本框中按需修改网关规则的配置。

5. 最后点击创建按钮,完成创建。

网关规则操作

网关规则创建完成后,可在网关规则页面查看选中命名空间内的网关规则列表,并进行以下操作。

  1. 查看或修改yaml:单击所需查看的网关规则所在行右侧的管理按钮,可在yaml文本框中查看并修改网关规则的yaml。完成yaml修改后,点击确定按钮即可提交修改。

  2. 删除网关规则:单击所需删除的网关规则所在行右侧的删除按钮,然后在确认对话框中,单击确认按钮。

网关规则CRD说明

Gateway 描述了在网格边缘操作的L4-L6 负载均衡器,接收传入或传出的 HTTP/TCP 连接。规范描述了一组应该暴露的端口、要使用的协议类型、用于负载均衡器的 SNI 配置等。可以将 VirtualService 绑定到网关,以控制到达特定主机或网关端口的流量转发。

 

配置示例

以下 Gateway 配置设置了一个代理作为负载均衡器,暴露端口 80 和9080(http)、443(https)、9443(https)以及端口 2379(TCP)用于入口。该网关规则将应用于具有标签 app: my-gateway-controller 的 pod 上。

 

apiVersion: networking.istio.io/v1alpha3

kind: Gateway

metadata:

  name: my-gateway

  namespace: some-config-namespace

spec:

  selector:

    app: my-gateway-controller

  servers:

  - port:

      number: 80

      name: http

      protocol: HTTP

    hosts:

    - uk.bookinfo.com

    - eu.bookinfo.com

    tls:

      httpsRedirect: true

  - port:

      number: 443

      name: https-443

      protocol: HTTPS

    hosts:

    - uk.bookinfo.com

    - eu.bookinfo.com

    tls:

      mode: SIMPLE

      serverCertificate: /etc/certs/servercert.pem

      privateKey: /etc/certs/privatekey.pem

  - port:

      number: 9443

      name: https-9443

      protocol: HTTPS

    hosts:

    - "bookinfo-namespace/*.bookinfo.com"

    tls:

      mode: SIMPLE

      credentialName: bookinfo-secret

  - port:

      number: 9080

      name: http-wildcard

      protocol: HTTP

    hosts:

    - "*"

 

字段说明

 

Gateway

Gateway 描述了在网格边缘操作的负载均衡器,用于接收传入或传出的 HTTP/TCP 连接。

字段

类型

说明

是否必选

servers

Server[]

服务规格列表

selector

map<string, string>

一个或多个标签,指示应该将此网关配置应用于哪些特定的 pod/VM。默认情况下,根据标签选择器,在所有命名空间中搜索工作负载。这意味着命名空间“foo”中的网关资源可以基于标签选择器选择命名空间“bar”中的 pod。如果标签选择器为空,网关规则将应用于所有工作负载。

 

 

Server

Server描述了在给定负载均衡器端口上的代理的属性

字段

类型

 

说明

 

是否必选

port

Port

代理应监听传入连接的端口。

bind

string

监听器应绑定到的 IP 地址或 Unix 域套接字。格式为:x.x.x.x 或 unix:///path/to/uds 或 unix://@foobar(Linux 抽象命名空间)。当使用 Unix 域套接字时,端口号应为 0。这可用于将此服务器的可达性限制为仅为网关内部。当网关需要与另一个网格服务通信时(例如,发布指标),通常会使用此功能。在这种情况下,使用指定绑定创建的服务器将对外部网关客户端不可用。

hosts

string[]

此网关暴露的一个或多个主机。虽然通常适用于 HTTP 服务,但也可以用于使用 SNI 的 TLS TCP 服务。主机被指定为带有可选的 namespace/ 前缀的 dnsName。dnsName 应使用 FQDN 格式指定,左侧组件中可以包含通配符字符(例如,prod/*.example.com)。将 dnsName 设置为 * 可以选择指定命名空间中的所有 VirtualService 主机(例如,prod/*)。

命名空间可以设置为 * 或 .,分别表示任何命名空间或当前命名空间。例如,*/foo.example.com 从任何可用命名空间选择服务,而 ./foo.example.com 仅从 sidecar 的命名空间选择服务。如果未指定namespace/,则默认为 */,即从任何命名空间选择服务。选定命名空间中的任何相关 DestinationRule 也将被使用。

VirtualService 必须绑定到网关,并且必须具有一个或多个与服务器中指定的主机匹配的主机。匹配可以是精确匹配或服务器主机的后缀匹配。例如,如果服务器的主机指定为 *.example.com,则具有主机 dev.example.com 或 prod.example.com 的 VirtualService 将匹配。但是,具有主机 example.com 或 newexample.com 的 VirtualService 将不匹配。

注意:只有导出到网关命名空间的虚拟服务才能被引用。服务导出范围由export to字段控制。有关详细信息,请参阅 VirtualService、DestinationRule 和 ServiceEntry 配置中的 exportTo 设置。

tls

ServerTLSSettings

TLS 相关选项集,用于控制服务器的行为。使用这些选项可以控制是否应将所有 HTTP 请求重定向到 HTTPS,以及要使用的 TLS 模式。

name

string

可选的服务器名称,设置时必须在所有服务器中唯一。此名称将用于各种用途,例如添加前缀到使用此名称生成的统计信息等。.

 

Port

端口描述了服务的特定端口的属性。

字段

类型

说明

是否必须

number

uint32

一个有效的非负整数端口号。

protocol

string

端口上暴露的协议。必须是 HTTP、HTTPS、GRPC、GRPC-WEB、HTTP2、MONGO、TCP、TLS 中的一个。TLS 可以用于在特定端口上终止非基于 HTTP 的连接,也可以根据 SNI 头将流量路由到目标,而无需终止 TLS 连接。

name

string

分配给端口的标签。

 

 

ServerTLSSettings

字段

类型

说明

是否必须

httpsRedirect

bool

如果设置为 true,则负载均衡器将对所有 HTTP 连接发送 301 重定向,要求客户端使用 HTTPS。

mode

TLSmode

可选:指示是否应使用 TLS 对此端口的连接进行安全保护。该字段的值确定了如何执行 TLS。

serverCertificate

string

如果模式为 SIMPLE 或 MUTUAL,则为必填项。服务器端 TLS 证书的文件路径。

privateKey

string

如果模式是 SIMPLE 或 MUTUAL,则为必填项。保存服务器私钥的文件路径。

caCertificates

string

如果模式为 MUTUAL 或 OPTIONAL_MUTUAL,则为必填项。用于验证提供的客户端证书的证书颁发机构证书的文件路径。

credentialName

string

1.对于在 Kubernetes 上运行的网关,持有 TLS 证书(包括 CA 证书)的密钥的名称。仅适用于 Kubernetes。一个 Opaque 密钥应包含以下键和值:tls.key: <privateKey> 和 tls.crt: <serverCert> 或 key: <privateKey> 和 cert: <serverCert>。

2.对于双向 TLS,cacert: <CACertificate> 和 crl: <CertificateRevocationList> 可以在同一个密钥中提供,或者在名为 <secret>-cacert 的单独密钥中提供。

3.还支持具有用于指定 OCSP 粘贴信息的 tls.ocsp-staple 键、用于 CA 证书的 ca.crt 键和用于证书吊销列表的 ca.crl 的服务器证书的 TLS 密钥。只能指定服务器证书和 CA 证书或 credentialName 中的一个。

subjectAltNames

string[]

用于验证客户端提供的证书中主体身份的备用名称列表。

verifyCertificateSpki

string[]

可选的授权客户端证书的 SPKI 的 Base64 编码的 SHA-256 散列列表。

注意:当同时指定 verify_certificate_hash 和 verify_certificate_spki 时,匹配任一值的哈希将导致接受该证书。

verifyCertificateHash

string[]

一个可选的十六进制编码的 SHA-256 哈希列表,用于授权客户端证书。简单格式和冒号分隔格式都可以接受。

注意:当同时指定 verify_certificate_hash 和 verify_certificate_spki 时,匹配任一值的哈希将导致接受该证书。

minProtocolVersion

TLSProtocol

可选:最低的 TLS 协议版本。默认情况下为 TLSV1_2。TLS 协议版本低于 TLSV1_2 需要设置兼容的密码套件(cipherSuites 设置)因为它们不再包含兼容的密码套件。

注意:使用低于 TLSV1_2 的 TLS 协议版本存在严重的安全风险。s.

maxProtocolVersion

TLSProtocol

可选:最大的 TLS 协议版本。

cipherSuites

string[]

如果指定,则仅支持指定的密码套件列表。否则,默认使用 Envoy 支持的默认密码套件列表。

 

TLSMode

字段

说明

PASSTHROUGH

客户端呈现的 SNI 字符串将用作 VirtualService 中 TLS 路由的匹配条件,以确定服务注册表中的目标服务。

SIMPLE

具有标准 TLS 语义的安全连接。在此模式下,握手期间不会请求客户端证书。

MUTUAL

使用双向 TLS 对下游进行安全连接,通过提供服务器证书进行身份验证。在握手期间还将请求客户端证书,并且客户端需要发送至少一个有效证书。

AUTO_PASSTHROUGH

类似于透明传输模式,但具有此 TLS 模式的服务器不需要关联的 VirtualService 将 SNI 值映射到注册表中的服务。目标详细信息,如服务/子集/端口,被编码在 SNI 值中。代理将转发到由 SNI 值指定的上游(Envoy)集群(一组端点)。此服务器通常用于在不同的 L3 网络中提供服务之间的连通性,否则这些服务之间的端点之间没有直接连通性。使用此模式假定源和目标均使用 Istio mTLS 来保护流量。

ISTIO_MUTUAL

通过提供服务器证书进行身份验证,从下游使用双向 TLS 进行安全连接。与 Mutual 模式相比,此模式使用由 Istio 自动为 mTLS 认证生成的证书,代表网关工作负载的身份。当使用此模式时,TLSOptions 中的所有其他字段都应为空。

OPTIONAL_MUTUAL

类似于 MUTUAL 模式,但客户端证书是可选的。与 SIMPLE 模式不同,握手期间仍会明确请求客户端证书,但客户端不需要发送证书。如果提供了客户端证书,则将对其进行验证。应指定 ca_certificates 以验证客户端证书。



9Y0llRQAswc7