ASM提供了一个kind为IstioGateway、apiVersion为istio.alibabacloud.com/v1beta1的自定义资源定义CRD(Custom Resource Definition),并提供了相应的Controller。通过监听该CRD资源变化事件,对应的Controller可以在Kubernetes集群中同步对应的Service、Deployment以及相关联的ServiceAccount等。本文介绍ASM网关CRD的配置示例和字段说明。
配置示例
前提条件
新增ASM网关必须创建在命名空间istio-system中,以便获取相关的配置信息。在Istio1.6及以上的版本中,部署到其他命名空间,会因为不能获取相关配置而导致ASM网关无法正常启动。
示例一:使用KubeAPI管理入口网关
- 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。 
- 在入口网关页面,单击使用YAML创建。 
- 在创建页面,输入网关的名称,选择命名空间为istio-system,配置如下YAML,然后单击创建。 
- 查看入口网关的服务信息。 - 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在服务页面上方,从命名空间下拉列表中,选择istio-system。 
- 在服务列表中,单击目标服务名称,查看入口网关的服务信息。 
 
- 查看入口网关的Pod信息。 - 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在容器组页面上方,从命名空间下拉列表中,选择istio-system。 
- 在Pod列表中,单击目标Pod名称,查看入口网关的Pod信息。 
 
示例二:使用KubeAPI管理出口网关
ASM提供出口网关服务,为网格内应用提供统一的流量出口。
- 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。 
- 在出口网关页面,单击使用YAML创建。 
- 在创建页面,输入出口网关的名称,选择命名空间为istio-system,配置如下YAML,然后单击创建。 - 关于字段的说明,请参见CRD字段说明。 
- 查看出口网关的服务信息。 - 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在服务页面,从命名空间下拉列表中选择istio-system。 
- 在服务列表中,单击目标服务名称,查看出口网关的服务信息。 
 
- 查看出口网关的Pod信息。 - 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在容器组页面,从命名空间下拉列表中选择istio-system。 
- 在Pod列表中,单击目标Pod名称,查看出口网关的Pod信息。 
 
CRD字段说明
| 字段 | 说明 | 默认值 | 
| metadata.name | 名称。生成的Kubernetes Service和Deployment名称为istio-{该值}。 | 无 | 
| metadata.namespace | 命名空间,生成的Kubernetes Service和Deployment所在的命名空间。 重要  为兼容Istio 1.6及以后的版本,该命名空间必须为istio-system。 | istio-system | 
| clusterIds | 数组类型。将部署网关的集群ID,这些集群隶属于当前网格实例所管理。 | 无 | 
| env | 数组类型。网关Pod的环境变量。 | 无 | 
| externalTrafficPolicy | 表示此服务是否希望将外部流量路由到节点本地或集群范围的端点,取值为Cluster或Local。 说明  该字段仅适用于入口网关。 | Cluster | 
| ports | 数组类型。网关Pod定义的端口和协议列表。例如: 
 说明  1.9.7.107之前的版本,protocol属性字段未做具体化声明,您需要统一声明配置为TCP。 | 无 | 
| gatewayType | 网关类型,可以指定为ingress或egress。 
 | ingress | 
| replicaCount | 副本数。 | 1 | 
| configVolumes | 网关Pod所使用的ConfigMap挂载卷,例如:  | 无 | 
| resources | 网关Pod的资源配置。 | 
 | 
| secretVolumes | 网关Pod所使用到的Secret挂载卷,例如:  | 无 | 
| serviceType | 网关的服务类型,取值为LoadBalancer、NodePort或者ClusterIP。出口网关通常设置为ClusterIP。 重要  如果您选择的数据面集群是注册集群且该字段为LoadBalancer时,请确保集群支持LoadBalancer类型的Service,避免ASM网关创建失败。 | LoadBalancer | 
| loadBalancerClass | 为网关服务指定loadBalancerClass,仅当serviceType为LoadBalancer类型时有效。该字段从ASM 1.18版本开始支持。更多信息,请参见在ASM入口网关中使用网络型负载均衡NLB。 | 无 | 
| serviceAnnotations | 网关服务的Annotation定义,例如 说明  仅适用于serviceType为LoadBalancer类型的网关,出口网关通常不配置。 | 无 | 
| serviceLabels | 网关服务的Label定义。 | 无 | 
| podLabels | 网关Pod的Label定义。 | 无 | 
| podAnnotations | 网关Pod的Annotation定义。 | 无 | 
| rollingMaxSurge | 滚动更新过程中运行操作期望副本数的最大Pod数。取值可以为绝对数值或百分数。 | "100%" | 
| rollingMaxUnavailable | 滚动更新过程中不可用的最大Pod数。取值为绝对数值或百分数。 | "25%" | 
| overrides | 当clusterIds指定了2个及以上的集群时,可以针对特定的集群指定不同于上述参数定义的配置值,配置值为Map类型。 说明  
 | 无 | 
| kernel.enabled | 是否启用自定义内核参数。 | false | 
| kernel.parameters | 内核参数设置,当前支持设置以下内核参数: 
 说明  ASM支持的内核参数修改项可能因宿主机内核版本不同,而出现部分参数不支持的情况。如果出现这种情况,网格Pod可能会报错。 您可以通过 所有的内核参数值为字符串格式,因YAML语法会将纯数字解析为数值类型,您需要使用半角双引号("")包裹您的值,例如net.core.somaxconn: "65535"。 | 无 | 
| compression.enabled | 是否启用入口网关压缩能力。 说明  compression相关字段仅适用于入口网关。 | false | 
| compression.content_type | 需要被压缩的ContentType列表,例如: 
 | 无 | 
| compression.disable_on_etag_header | 
 | false | 
| compression.min_content_length | 当ContentLength大于或等于设置的值时,触发压缩。 | 30 | 
| compression.remove_accept_encoding_header | 
 | false | 
| compression.gzip | 当前仅支持gzip压缩格式。若要启用压缩,必须填写该字段。若所有参数保持默认,也需要填写空结构,例如 | 无 | 
| compression.gzip.memory_level | zlib内部的内存使用级别。合法值为1~9。取值越大占用内存越多,同时也会带来更快的压缩速度和更好的压缩质量。 | 5 | 
| compression.gzip.compression_level | zlib的压缩级别,合法值如下: 
 说明  BEST_COMPRESSION是最高压缩质量;BEST_SPEED是最快压缩速度。其中: 
 | DEFAULT_COMPRESSION | 
| compression.gzip.compression_strategy | zlib的压缩策略,合法值如下: 
 说明  DEFAULT_STRATEGY 默认的压缩策略,使用底层默认的行为,在多数情况下都能产生满意的压缩结果。 FILTERED 针对大部分存在重复数据的场景,优先使用过滤层压缩算法。对于一些文本数据和人工生成的数据压缩率较高。 HUFFMAN_ONLY 只使用哈夫曼编码进行压缩,不使用其他压缩算法。一般用于生成静态数据,生成的压缩数据可以更快地解压缩。 RLE 使用连续相同数据压缩算法,对于压缩连续相同的数据非常高效。比如位图数据等。 FIXED 使用预定义的编码树进行哈夫曼编码,不根据具体数据动态生成编码树。这样的好处是高速压缩和解压缩,但压缩率一般会比较低。 | DEFAULT_STRATEGY | 
| compression.gzip.window_bits | zlib窗口大小。合法值为9~15。 | 12 | 
| compression.gzip.chunk_size | zlib输出缓冲区大小。 | 4096 | 
| hostNetwork | 主机网络。 
 | false | 
| dnsPolicy | DNS策略。关于dnsPolicy的详细介绍,请参见DNS for Services and Pods。 | ClusterFirst | 
| cpu.targetAverageUtilization | 开启HPA时的CPU目标使用率。取值为1~100。如果超过该值,会增加副本;如果低于该值,会减少副本。 | 无 | 
| memory.targetAverageUtilization | 开启HPA时的内存目标使用率。取值为1~100。如果超过该值,会增加副本;如果低于该值,会减少副本。 | 无 | 
| maxReplicas | HPA调节的最大副本数。取值为正整数。 | 无 | 
| minReplicas | HPA调节的最小副本数。取值为正整数,最小值为1。 | 无 | 
| nodeSelector | 指定网关Pod所在的节点。在该字段下,您可以自定义Key和Value的值,示例如下:  | 无 | 
| affinity | 通过配置节点亲和性来指定网关Pod所在的节点。更多信息,请参见亲和性与反亲和性。 | 无 | 
| tolerations | 和节点Taint配合使用。更多信息,请参见污点和容忍度。 | 无 | 
导致网关滚动重启的字段
以下字段变更会导致网关滚动重启,请谨慎操作。
- env 
- ports(ASM实例版本为1.16以下会导致网关重启,1.16及以上不会重启) 
- configVolumes 
- resources 
- secretVolumes 
- podLabels 
- podAnnotations 
- kernel.enabled 
- kernel.parameters 
- hostNetwork 
- dnsPolicy 
- nodeSelector(视调度情况而定) 
- affinity(视调度情况而定) 
- tolerations(视调度情况而定)