Speed Cloud verwendet Higress, um die Produktionspraxis von Ngnix Ingress + Spring Cloud Gateway zu ersetzen

Autor: Wang Jinshan, Microservice-Architekt der Technologieabteilung von Beijing Yunsichangxiang Technology Co., Ltd., verantwortlich für die Forschung und Entwicklung des API-Gateways und Service-Grids des Unternehmens

Einführung in die Speed-Cloud

Speed ​​Cloud wurde im Oktober 2014 gegründet und hat sich zum Ziel gesetzt, Unternehmen bei der digitalen Transformation durch Cloud-native-Technologie zu unterstützen. Das Unternehmen verfügt über zwei Kernproduktsysteme: die Cloud-native Anwendungsplattform TCAP und die Cloud-native Datenplattform KubeData. Zu den Produkten gehört Cloud-native DevOps, Container-Cloud-PaaS und dazwischenliegende Softwaredienste, Edge-Computing, Microservice-Governance, Service Mesh, API-Gateway usw.

Nachfragehintergrund

1.png

In der PaaS-Plattform von Speed ​​Cloud gibt es verschiedene Gateway-Software:

  • Traffic-Gateway basierend auf HAProxy und Nginx Ingress
  • Spring Cloud Gateway des Spring Cloud Microservice Systems
  • Kong als API-Gateway
  • Istio Ingress Gateway unter dem Service-Mesh-System

Obwohl die oben genannten Produkte jeweils ihre eigenen Anwendungsszenarien haben, besteht das Problem darin, dass die Technologie-Stacks unterschiedlich sind. Nach der Einführung mehrerer Tools für unterschiedliche Anforderungen wird dies zu einem starken Anstieg der Wartungskosten führen. Daher ist es unser Ziel, ein Tool zu finden, das alle Anforderungen erfüllt und einen einheitlichen Technologie-Stack nutzt. Higress hat genau unsere Bedürfnisse erfüllt.

Higress-Lösung

Alternative zu Nginx Ingress

Higress kann als Ingress-Eintrittsgateway des K8s-Clusters verwendet werden, ist mit einer großen Anzahl von K8s-Nginx-Ingress-Annotationen kompatibel und kann schnell und reibungslos von K8s-Nginx-Ingress zu Higress migrieren. Das Folgende ist ein Beispiel für die Implementierung von REST-Routing, das auf den eigenen Annotationen von Higress basiert und mit den Pfaden zum Umschreiben von Nginx Ingress-Annotationen kompatibel ist:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    # 兼容 Nginx Ingress 注解
    nginx.ingress.kubernetes.io/rewrite-target: /
    # Higress 注解,支持 method/header/query 匹配路由
    higress.io/match-method: POST
    higress.io/exact-match-query-higressQuery: hi
    higress.io/prefix-match-header-x-higress-header: hi
  name: foo
spec:
  ingressClassName: higress
  rules:
  - host: foo.example.com
    http:
      paths:
      - pathType: Prefix
        path: /foo
        backend:
          service:
            name: foo-service
            port:
              number: 5678

Und die Lua-Codeleistung von Nginx Ingress ist relativ schlecht, und die Leistung von Higress im Vergleich zu Nginx Ingress ist erheblich verbessert, wie in der folgenden Abbildung dargestellt:

2.png

Alternative zu Spring Cloud Gateway

Unter dem Spring Cloud-Microservice-System muss es als Microservice-Gateway mit der Microservice-Registrierung verbunden werden, um die Serviceerkennung zu realisieren. Higress stellt CRD McpBridge bereit, das problemlos mit verschiedenen Registrierungszentren verbunden werden kann. Das von uns verwendete Spring Cloud-Registrierungszentrum ist Nacos und die Konfiguration von McpBridge ist wie folgt:

apiVersion: networking.higress.io/v1
kind: McpBridge
metadata:
  name: default
  namespace: higress-system
spec:
  registries:
    # 定义一个名为 my-nacos  的服务来源
  - name: my-nacos
    # 注册中心类型是 Nacos 2.x,支持 gRPC 协议
    type: nacos2
    # 注册中心的访问地址,可以是域名或者IP
    domain: 127.0.0.1
    # 注册中心的访问端口,Nacos 默认都是 8848
    port: 8848
    # Nacos 命名空间 ID
    nacosNamespaceId: d8ac64f3-xxxx-xxxx-xxxx-47a814ecf358
    # Nacos 服务分组
    nacosGroups:
    - DEFAULT_GROUP

Als Nächstes konfigurieren Sie Ingress so, dass es an das auf Nacos registrierte Service-Benutzercenter weitergeleitet wird:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    higress.io/destination: user-center.DEFAULT-GROUP.d8ac64f3-xxxx-xxxx-xxxx-47a814ecf358.nacos
  name: user
  namespace: default
spec:
  rules:
  - http:
      paths:
      - backend:
          resource:
            apiGroup: networking.higress.io
            kind: McpBridge
            name: default
        path: /
        pathType: Prefix

Auf diese Weise können Spring Cloud-Microservices ohne Änderungen mit dem Higress-Gateway verbunden werden. Im Vergleich zu herkömmlichen Java-Microservice-Gateways wie Spring Cloud Gateway/Zuul ist die Leistung von Higress mehr als doppelt so hoch, was die Ressourcenkosten erheblich senken kann.

Kong ersetzen

Das API-Gateway-Produkt von Speed ​​Cloud wird verwendet, um Unternehmen und Entwicklern dabei zu helfen, die Verwaltung des gesamten Lebenszyklus der API-Erstellung, -Wartung, -Veröffentlichung, -Überwachung und -Alarmierung abzuschließen. Über das API-Gateway wird der Back-End-Dienst in Form einer API geöffnet und allen Parteien zur Verfügung gestellt. Authentifizierungs- und Authentifizierungsfunktionen sind die Schlüsselfunktionen des API-Gateways. Unser API-Gateway wurde ursprünglich auf Basis von Kong erstellt und verwendet hauptsächlich die Plug-Ins Key Auth/Basic Auth/JWT Auth/HMAC Auth von Kong. Higress bietet auch diese Plug-In-Funktionen :

3.png

Am Beispiel von Key Auth kann das von Higress bereitgestellte WasmPlugin CRD wie folgt konfiguriert werden:

apiVersion: extensions.higress.io/v1alpha1
kind: WasmPlugin
metadata:
  name: key-auth
  namespace: higress-system
spec:
  # 全局配置,配置认证规则
  defaultConfig:
    consumers:
    - credential: 2bda943c-xxxx-xxxx-xxxx-00163e1250b5
      name: consumer1
    - credential: c8c8e9ca-xxxx-xxxx-xxxx-e700dcc40e35
      name: consumer2
    keys:
    - x-api-key
    # 从请求header识别key
    in_header: true
    # 开启全局认证,consumer未识别将拒绝访问
    global_auth: true
  # 匹配规则,配置授权规则
  matchRules:
  # 路由级生效配置,匹配default命名空间下名为foo的ingress
  - ingress:
    - default/foo
    config:
      # 仅允许 consumer1 访问
      allow:
      - consumer1
  # 域名级生效配置
  - domain:
    - www.test.com
    - *.example.com
    config:
      # 仅允许 consumer1 访问
      allow:
      - consumer2
  url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/key-auth:1.0.0

Initiieren Sie eine Authentifizierungsanforderung, da xxx.exmaple.com nur den Zugriff von Consumer2 autorisiert, sodass der folgende Curl-Befehl 403 zurückgibt:

curl http://xxx.example.com/test -H 'x-api-key: 2bda943c-xxxx-xxxx-xxxx-00163e1250b5'

Darüber hinaus bietet Higress einen flexibleren benutzerdefinierten Plug-In-Mechanismus. Im Vergleich zu den neuen Plug-Ins von Kong, bei denen das Gateway erneut bereitgestellt werden muss, kann Higress die Plug-In-Logik dynamisch erweitern und im laufenden Betrieb aktualisieren, was völlig zerstörungsfrei ist Datenverkehr und kann auch die mehrsprachige Entwicklung ohne Einschränkung unterstützen. in der Lua-Sprache.

Alternative zum Istio Ingress Gateway

Das Service-Grid-Produkt von Speed ​​​​Cloud basiert auf Istio. In der Istio-Service-Grid-Architektur ist das Istio Ingress Gateway im Allgemeinen für das Nord-Süd-Verkehrsmanagement verantwortlich. Da Higress auch die Istio-API unterstützen kann, verwenden wir Higress auch, um das Nord-Süd-Verkehrsmanagement im Service Mesh zu vereinheitlichen.

Higress selbst ist nicht stark von Istio abhängig, daher ist die API-Unterstützung von Istio standardmäßig deaktiviert, was über die Helmparameterkonfiguration aktiviert werden muss:

helm upgrade higress -n higress-system higress.io/higress --reuse-values --set global.enableIstioAPI=true

Nach der Aktivierung können Sie die Istio-API direkt verwenden, um Routen auf Higress zu verwalten:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: devops
  namespace: higress-system
spec:
  selector:
    higress: higress-system-higress-gateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - devops.com
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: devops
  namespace: higress-system
spec:
  gateways:
  - higress-system/devops
  hosts:
  - devops.com
  http:
  - name: default
    route:
    - destination:
        host: devops.default.svc.cluster.local 

Basierend auf der Istio-API unterstützt Higress auch TCP-Routing, das unsere bisherige Verwendung von HAProxy zum Proxy von MySql und anderen Middleware-Funktionen ersetzen kann, zum Beispiel:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: mysql 
  namespace: higress-system
spec:
  selector:
    higress: higress-system-higress-gateway
servers:
  - hosts:
    - '*'
   port:
     name: tcp
     number: 3306
     protocol: TCP
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: mysql
  namespace: higress-system
spec:
  gateways:
  - mysql
  hosts:
  - '*'
  tcp:
  - match:
    - port: 3306
    route:
    - destination:
         host: mysql
         port:
           number: 3306
         subset: v1

Ergebnis und Ausblick

4.png

Die migrierte Architektur basiert auf der Higress-Integration verschiedener Technologie-Stacks auf Produktebene, was das Benutzererlebnis verbessert. Die spezifischen Vorteile sind wie folgt:

  1. Higress unterstützt gleichzeitig die K8s Ingress API und die Istio Gateway/VirtualService API, und mehrere Cluster können schnell und reibungslos aktualisiert werden
  2. Verwenden Sie Higress, um mehrere Gateways zu vereinheitlichen, den Technologie-Stack für Verkehrseintritt/Routing-Last/Sicherheitsauthentifizierung zu vereinheitlichen und Kostensenkungen und Effizienzsteigerungen zu realisieren
  3. Higress basiert auf Envoy und nutzt den gleichen Technologie-Stack wie Sidecar für das Ost-West-Verkehrsmanagement, was die Erweiterungs- und Wartungskosten für Entwickler senkt

Abschließend äußern wir auch einige Erwartungen an die zukünftige Entwicklung von Higress:

  1. Ich hoffe, die Gateway-API so schnell wie möglich zu unterstützen und TCPRoute/UDPRoute zu unterstützen, um die Vierschichtfähigkeit zu verbessern
  2. Wir freuen uns darauf, dass die Wasm-Plug-in-Ökologie der Community immer zahlreicher wird und mehr sofort einsatzbereite Funktionen bietet
  3. Derzeit wird Speed ​​​​Cloud mehrere Sätze von Higress-Gateways in einem K8s-Cluster bereitstellen, in der Hoffnung, einen Betreibermechanismus zur Vereinfachung von Betrieb und Wartung bereitzustellen

Supongo que te gusta

Origin blog.csdn.net/alisystemsoftware/article/details/131374670
Recomendado
Clasificación