ACK场景中使用MSE云原生网关作为出口网关

出口网关是指连接内部网络和外部网络的边缘网关,用于控制网络流量并实现远程访问和通信。MSE云原生网关作为出口网关,能够为ACK集群提供稳定、高效、安全的网络出口服务,满足业务对于出口流量管理和安全控制的需求。

MSE云原生网关优势

  • MSE云原生网关提供托管式的网关服务,采用独立部署模式,不受ACK集群影响,稳定性更高。

  • MSE云原生网关提供丰富的七层HTTP协议治理能力,包括IP黑白名单、限流、负载均衡、TLS卸载、流量镜像、Header控制等,功能更加丰富。

  • ACK集群无需所有的Pod都开启公网访问能力,只需要对MSE云原生网关开启公网访问即可(对网关使用的交换机开启SNAT),提供更高的安全控制。

部署架构

image.png

操作步骤

步骤一:安装MSE Ingress Controller

在已有ACK/ACK Serverless集群中安装MSE Ingress Controller,或者在创建集群时直接安装。具体操作,请参见安装MSE Ingress Controller组件

步骤二:创建MseIngressConfig资源来创建或者关联MSE网关实例

MseIngressConfig是MSE Ingress Controller提供的自定义资源CRD,通过创建MseIngressConfig资源可以创建或者关联MSE托管网关实例。具体操作,请参见创建MSE云原生网关实例

创建网关时只需创建私网CLB即可,配置示例如下所示:

apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
  name: egress-gateway
spec:
  name: egress-gateway
  common:
    instance:
      spec: 2c4g
      replicas: 3
    network:
      vSwitches:
        - "vsw-xxxx" # 创建网关时绑定的交换机ID
      privateSLBSpec: slb.s2.small
说明

如果在创建ACK或ACK Serverless集群时没有开启为专有网络配置 SNAT,则集群无法访问外网,需要为网关单独配置SNAT以支持公网访问。

公网访问需要使用NAT网关的SNAT条目,关于NAT网关的创建操作,请参见使用公网NAT网关SNAT功能访问互联网。执行该文档步骤三:创建SNAT条目,创建一条SNAT条目,选择交换机粒度,然后将MseIngressConfig中的交换机ID添加进去完成条目创建。

image.png

步骤三:创建ExternalName类型的K8s服务关联外部服务

类型为ExternalName的K8s服务可以实现将内部服务映射到外部DNS名称,例如希望在K8s集群内部访问外部的阿里云的MSE产品页,配置示例如下:

apiVersion: v1
kind: Service
metadata:
  name: aliyun-svc-external
  namespace: default
spec:
  externalName: www.aliyun.com
  ports:
    - name: port1
      port: 80
      protocol: TCP
      targetPort: 80
    - name: port2
      port: 443
      protocol: TCP
      targetPort: 443
  type: ExternalName

步骤四:为创建的ExternalName类型服务配置路由

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mse-ingress
  namespace: default
spec:
  ingressClassName: mse
  rules:
    - host: www.aliyun.com  # 配置域名
      http:
        paths:
          - backend:
              service:
                name: aliyun-svc-external  # 指定使用ExternalName服务
                port:
                  number: 80
            path: /product/aliware/mse  # 配置MSE访问路径
            pathType: Prefix

将上述配置保存为mse-ingress.yaml后,使用kubectl apply -f mse-ingress.yaml应用配置,然后使用kubectl get ingress mse-ingress -o yaml查看Ingress资源获取MSE云原生网关的CLB地址。示例如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS  # aliyun目前全站采用HTTPS,需要配置网关到后端aliyun服务走HTTPS
  name: mse-ingress
  namespace: default
spec:
  ingressClassName: mse
  rules:
    - host: www.aliyun.com
      http:
        paths:
          - backend:
              service:
                name: aliyun-svc-external
                port:
                  number: 443
            path: /product/aliware/mse  
            pathType: Prefix
status:
  loadBalancer:
    ingress:
      - ip: xx.xx.xx.xx  # 替换为MSE云原生网关的CLB地址

步骤五:测试验证Pod内访问外部MSE

curl http://www.aliyun.com/product/aliware/mse --resolve  www.aliyun.com:80:xx.xx.xx.xx
说明

请将xx.xx.xx.xx步骤四中获取的网关CLB IP地址。

相关文档

关于通过Ingress方式使用网关其他高阶特性的内容,请参见MSE Ingress高级用法