You need to enable JavaScript to run this app.
导航
在服务网格中添加 AWS 入口网关
最近更新时间:2024.12.09 10:00:02首次发布时间:2024.12.09 10:00:02
复制全文
我的收藏
有用
有用
无用
无用

入口网关(Ingress Gateway)是服务网格的网络流量入口。在网格中添加集群时会自动部署用于连接集群内部服务的东西向网关(East-west Gateway),因此通过创建入口网关和虚拟服务即可实现对入口流量的精细化分配。本文为您介绍如何创建入口网关。

背景信息

  • 用户可以为不同的 Kubernetes 集群分别创建不同的入口网关,此时需要用户通过 DNS 等其他手段控制入口流量的调度。

  • 同样用户也可以为多个数据面集群只创建一个入口网关,如果需要访问的服务实例不在当前入口网关所在的集群时,会通过 Istio Eastwest Gateway 访问到服务实例所在的集群。

前置条件

已创建服务网格,操作方法参见 创建网格

第一步:在 VKE 纳管 EKS

说明

【邀测·申请试用】注册集群目前处于邀测阶段,如需使用,请提交申请。

通过注册集群的代理方式在容器服务 VKE 中纳管 EKS 集群,操作详情参见 通过代理方式注册现有集群

第二步:在服务网格创建入口网关

  1. 登录 服务网格控制台

  2. 在左侧导航栏,选择 系统运维 > 入口网关

  3. 单击 创建入口网关

  4. 配置入口网关参数,完成后单击 确认
    alt

    参数说明
    入口网关名称入口网关名称长度限制 2~63 个字符,只能包含大小写字母、数字、和中划线(-), 不能以中划线(-)开头。
    网格入口网关所属的网格。
    集群添加入口网关实例所部署的 EKS 集群。
    转发规则转发规则定义了入口网关对外开放的域名、协议和端口,可以添加多条转发规则。支持 HTTP、HTTP2、HTTPS、TCP、TLS、gRPC 协议。
    资源规格入口网关的资源规格大小。
    副本数入口网关的副本数,建议选择 2 个以上副本。
    • 转发规则

      参数说明
      协议转发规则定义了入口网关对外开放的域名、协议和端口,可以添加多条转发规则。支持 HTTP、HTTP2、HTTPS、TCP、TLS、gRPC 协议。
      端口默认值为 80。合法值为 1~65535。
      域名填写域名或 IP 地址。支持填写多行、多行用换行分割。支持填写星号 (*) 代表所有。
    • 当选择 HTTPS 和 TLS 协议时,需要额外进行 TLS 相关设置。

      参数说明
      是否开启 HTTP 重定向开启 HTTP 重定向后会将 HTTP 访问重定向至 HTTPS。
      TLS 版本区间支持选择 auto、1.0、1.1、1.2、1.3。如果选择 auto,服务网格将在可选的范围内,为您选择一个最优的版本。
      TLS 模式转发协议为 HTTPSTLS 时,支持选择不同的 TLS 模式:
      • simple:为网关启用 HTTPS 安全服务,使用标准 TLS 语义的安全连接。
      • mutual:为网关启用 HTTPS 安全服务,通过用户提供的服务器证书进行身份验证,使用 mTLS 来保护与下游的连接。
      • istio_mutual:为网关启用 HTTPS 安全服务,通过 Istio 生成的身份验证的服务器证书,使用相互 TLS 使用来自下游的安全连接。
      • passthrought:直接透传 TLS,即在网关中不进行 TLS Termination,透传到后端服务。
      • auto_passthrough: 直接透传 TLS,与 passthrough 模式不同的是,此模式不需要关联的虚拟服务即可从 SNI 值映射到注册表中的服务。使用这种模式的前提是两端的流量都被 Istio 的 mTLS 保护。
      证书来源当 TLS 模式为 simplemutual 时,需要配置服务器证书,需要选择已有的证书和私钥信息或新建证书和私钥。
      证书名称证书来源为 创建 时需要填写。自定义所新建证书的名称。
      服务端证书证书来源为 创建 时需要填写。复制服务端证书并粘贴至本文本框。
      密钥证书来源为 创建 时需要填写。通常密钥是以 .key.pem 为扩展名的文件。复制文件内容并粘贴至本文本框。
      CA 证书证书来源为 创建 时需要填写。复制 CA 证书并粘贴至本文本框。

操作结果

完成创建后可以在入口网关列表查看新建的入口网关。

alt

第三步:绑定负载均衡器

在 EKS 中创建入口网关不会自动创建对应的负载均衡器 NLB。需要绑定已创建的 AWS 负载均衡器 NLB 或者单独创建。

方式一:绑定存量的 NLB

在 EKS 集群的 istio-system 命名空间中,通过 TargetGroupBinding 绑定 NLB 和入口网关 Deployment 对应的 Service。示例 YAML 文件如下。

apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
  name: test
  namespace: istio-system
spec:
  serviceRef:
 ###入口网关所在 Deployment 对应的 Service
    name: istio-ingressgateway-f9tp
    port: 80
  targetType: ip
  ### NLB 的 arn
  targetGroupARN: arn:aws:elasticloadbalancing:ap-south-1:113****:targetgroup/eks-ingress-1/ad8fef300a447c6b

方式二:创建新的 NLB 并绑定

通过 AWS Load Balancer Controller 创建 NLB,创建完成后自动绑定入口网关。

在 EKS 集群中的 istio-system 命名空间为入口网关的 Deployment 创建 Load Banlance 类型的 Service,并在 Service 添加如下 annotations

apiVersion: v1
kind: Service
metadata:
  # 如果需要开启 LB,需要增加如下 Annotation
   annotations:
     service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
     service.beta.kubernetes.io/aws-load-balancer-type: external
    ## internal或internet-facing
     service.beta.kubernetes.io/aws-load-balancer-scheme: internal 
  name: istio-ingressgateway-****
  namespace: istio-system
spec:
  # 需要和 Istio Gateway 配置保持一致
  ports:
  - name: http-80
    port: 80
    protocol: TCP
    targetPort: 80
  # 入口网关所在 Deployment
  selector:
    ams.paas.volcengine.com/gateway: istio-ingressgateway-****
    app: istio-ingressgateway-****
    istio: ingressgateway
  # 如果为 LoadBalancer 类型,需要将 ClusterIP 修改为 LoadBalancer
  type: ClusterIP