创建服务网关
控制台创建服务网关
- 登录UCS控制台,单击左侧导航栏中的“服务网格”,进入服务网格列表页。
- 单击服务网格名称,进入服务网格详情页。
- 在左侧导航栏,单击“服务网关 > 网关实例”,进入网关实例列表页面。
- 单击右上角“创建网关”,弹出创建网关界面。
- 填写参数配置。
- 基本信息:
- 网关名称:请输入4到59个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
- 集群名称:选择已接入到网格的集群,部署网格负载。
- 命名空间:选择网格命名空间。如果集群的命名空间未同步创建到网格,请单击“创建命名空间”选择命名空间后,单击确定。
- 访问入口:
- 负载均衡:选择负载均衡实例,提供网络访问。
- 使用已有负载均衡:从已有负载均衡列表中选择。支持独享型和共享型实例。共享型仅支持集群所在VPC下的负载均衡实例,查询结果已自动过滤。独享型仅支持集群所在 VPC下、实例规格支持网络型、有私有IP地址的独享型负载均衡实例,查询结果已自动过滤。
- 新建负载均衡:单击新建负载均衡,选择所需的负载均衡规格。
- 负载均衡:选择负载均衡实例,提供网络访问。
- 网关负载:
- 网关实例数:设置网关工作负载Pod数量。默认值为1。输入值必须在0到100之间。
- CPU配额:申请:容器需要使用的最小CPU值,默认0.10Core。限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。
- 内存配额:申请:容器需要使用的内存最小值,默认128MiB。限制:允许容器使用的内存最大值。如果超过,容器会被终止。
- 监听器:
- 监控器名称:请输入4到59个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
- 对外协议:HTTP、TCP、TLS、HTTPS四种协议选择一种即可。
- 对外端口:输入值必须在1到65,535之间。必须保证该端口未被所选的负载均衡实例监听器端口占用。
- 入口地址(可选):请输入域名。支持以通配符“*”开头。以通配符“*”为前缀的域名被解释为后缀匹配。即 *.example.com 将匹配 test.example.com 和 foo.test.example.com,但不匹配 example.com。
- 路由配置:详情请看HTTP路由、TLS路由、TCP路由。
- 基本信息:
- 单击“确定”,完成网关创建。
创建网关将会同步创建其对应的工作负载Pod、Loadbalancer service,工作负载Pod请勿调度到CentOS 7.6和Huawei Cloud EulerOS 1.1操作系统的节点,否则将无法启动。1.22及以上集群,网关工作负载Pod将依赖内核ip_unprivileged_port_start能力,可执行“ls -l /proc/sys/net/ipv4/ip_unprivileged_port_start”命令,确认是否支持该能力,不支持该能力的节点,网关工作负载Pod调度上去将无法正常启动。
以HTTP流量在801端口上配置 Gateway为例,通过YAML创建服务网关。
YAML创建服务网关
- 登录UCS控制台,单击左侧导航栏中的“服务网格”,进入服务网格列表页。
- 单击服务网格名称,进入服务网格详情页。
- 在左侧导航栏,单击“服务网关 > 网关实例”,进入网关实例列表页面。
- 单击右上角“YAML创建”,弹出服务网关YAML创建界面。
- 在801端口上创建负载均衡器,用于接收HTTP连接,只处理HTTP协议的流量(根据实际需求调整配置参数):
apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: annotations: gateway.asm/cluster-name: cluster-test # 必选。选择gateway工作负载实例及loadbalancer svc创建在哪个集群。 gateway.asm/gateway-deployment-replicas: "2" # 可选。gateway工作负载实例个数。 gateway.asm/gateway-deployment-resources: '{"requests":{"cpu":"100m","memory":"128Mi"},"limits":{"cpu":"2000m","memory":"1024Mi"}}' # 可选。gateway工作负载CPU、内存配额设置。 kubernetes.io/elb.class: union # 必选。负载均衡器elb实例类型,union共享型,performance独享型。 kubernetes.io/elb.id: 73febb1c-b191-4fd9-832e-138b2657d3b1 # 必选。负载均衡器elb实例ID。 name: gateway namespace: whtest spec: gatewayClassName: istio listeners: - name: default hostname: "*.example.com" # 可选 port: 801 # 1-65535 protocol: HTTP allowedRoutes: # 可选,指定了哪些ns下route规则可以绑定在该gateway上,没有该字段默认是同gateway ns的才可以与该gateway绑定 namespaces: from: All # 支持All、Same、Selector
其他协议网关YAML示例可参考如下内容。
HTTPS协议网关
HTTPS协议网关,开启TLS终止,网关YAML示例如下:
apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: annotations: gateway.asm/cluster-name: cluster-test # 必选。选择gateway工作负载实例及loadbalancer svc创建在哪个集群。 gateway.asm/gateway-deployment-replicas: "2" # 可选。gateway工作负载实例个数。 gateway.asm/gateway-deployment-resources: '{"requests":{"cpu":"100m","memory":"128Mi"},"limits":{"cpu":"2000m","memory":"1024Mi"}}' # 可选。gateway工作负载CPU、内存配额设置。 kubernetes.io/elb.class: union # 必选。负载均衡器elb实例类型,union共享型,performance独享型。 kubernetes.io/elb.id: 73febb1c-b191-4fd9-832e-138b2657d3b1 # 必选。负载均衡器elb实例ID。 name: https-gateway namespace: whtest spec: gatewayClassName: istio listeners: - name: https hostnames: ["httpbin.example.com", "httpbin2.example.com"] # 必选。如果证书只含一个域名,则使用hostname: "httpbin.example.com" port: 443 protocol: HTTPS allowedRoutes: # 可选,指定了哪些ns下route规则可以绑定在该gateway上,没有该字段默认是同gateway ns的才可以与该gateway绑 namespaces: from: All # 支持All、Same、Selector tls: mode: Terminate certificateRefs: - name: httpbin-credential # 必选。需要提前在同命名空间下创建网关证书。
TLS协议网关
TLS协议网关,不开启TLS终止,网关YAML示例如下:
apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: annotations: gateway.asm/cluster-name: cluster-test # 必选。选择gateway工作负载实例及loadbalancer svc创建在哪个集群。 gateway.asm/gateway-deployment-replicas: "2" # 可选。gateway工作负载实例个数。 gateway.asm/gateway-deployment-resources: '{"requests":{"cpu":"100m","memory":"128Mi"},"limits":{"cpu":"2000m","memory":"1024Mi"}}' # 可选。gateway工作负载CPU、内存配额设置。 kubernetes.io/elb.class: union # 必选。负载均衡器elb实例类型,union共享型,performance独享型。 kubernetes.io/elb.id: 73febb1c-b191-4fd9-832e-138b2657d3b1 # 必选。负载均衡器elb实例ID。 name: tls-gateway namespace: whtest spec: gatewayClassName: istio listeners: - name: tls hostnames: ["httpbin.example.com", "httpbin2.example.com"] # 必选。如果证书只含一个域名,则使用hostname: "httpbin.example.com" port: 9443 protocol: TLS allowedRoutes: # 可选,指定了哪些ns下route规则可以绑定在该gateway上,没有该字段默认是同gateway ns的才可以与该gateway绑定 namespaces: from: All # 支持All、Same、Selector tls: mode: Passthrough
TCP协议网关
TCP协议网关,网关YAML示例如下:
apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: annotations: gateway.asm/cluster-name: cluster-test # 必选。选择gateway工作负载实例及loadbalancer svc创建在哪个集群。 gateway.asm/gateway-deployment-replicas: "2" # 可选。gateway工作负载实例个数。 gateway.asm/gateway-deployment-resources: '{"requests":{"cpu":"100m","memory":"128Mi"},"limits":{"cpu":"2000m","memory":"1024Mi"}}' # 可选。gateway工作负载CPU、内存配额设置。 kubernetes.io/elb.class: union # 必选。负载均衡器elb实例类型,union共享型,performance独享型。 kubernetes.io/elb.id: 73febb1c-b191-4fd9-832e-138b2657d3b1 # 必选。负载均衡器elb实例ID。 name: tcp-gateway namespace: whtest spec: gatewayClassName: istio listeners: - name: tcp port: 8899 protocol: TCP allowedRoutes: # 可选,指定了哪些ns下route规则可以绑定在该gateway上,没有该字段默认是同gateway ns的才可以与该gateway绑定 namespaces: from: All # 支持All、Same、Selector