出口网关是指连接内部网络和外部网络的边缘网关,用于控制网络流量并实现远程访问和通信。MSE云原生网关作为出口网关,能够为ACK集群提供稳定、高效、安全的网络出口服务,满足业务对于出口流量管理和安全控制的需求。
MSE云原生网关优势
MSE云原生网关提供托管式的网关服务,采用独立部署模式,不受ACK集群影响,稳定性更高。
MSE云原生网关提供丰富的七层HTTP协议治理能力,包括IP黑白名单、限流、负载均衡、TLS卸载、流量镜像、Header控制等,功能更加丰富。
ACK集群无需所有的Pod都开启公网访问能力,只需要对MSE云原生网关开启公网访问即可(对网关使用的交换机开启SNAT),提供更高的安全控制。
部署架构
操作步骤
步骤一:安装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添加进去完成条目创建。
步骤三:创建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高级用法。