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(视调度情况而定)