全部產品
Search
文件中心

Microservices Engine:ACK情境中使用MSE雲原生網關作為出口網關

更新時間:Jul 06, 2024

出口網關是指串連內部網路和外部網路的邊緣網關,用於控制網路流量並實現遠端存取和通訊。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 Gateway的SNAT條目,關於NAT Gateway的建立操作,請參見使用公網NAT GatewaySNAT功能訪問互連網。執行該文檔步驟三:建立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進階用法