2022-02-11|閱讀時間 ‧ 約 7 分鐘

API Gateway

    API Gateway
    API Gateway

    API Gateway 是什麼?

    參考上圖,API Gateway 是一個程式,位於 Client 和 Microservice 之間。當伺服器架構採用這種設計後,會有以下優點:
    1. 架構彈性 - 當伺服器架構需要調整的時候,Client 不需要調整(前提是 API 維持不變)。
    2. 安全性 - Internet 的使用者都無法直接存取 API Gateway 後面的 service,只能透過 API Gateway 間接存取。所以 service 可開放存取的 API 是有限的,降低惡意使用者攻擊的範圍。

    API Gateway 的功能

    具代表性的 API Gateway 有 HAProxy、NGINX、Kong、Traefik。我們也可以用自己熟悉的程式語言撰寫 API Gateway,比如用 Ocelot 撰寫。
    這些 API Gateway 提供的功能都非常的接近,但是不同的 API Gateway 有廠商自己提供的特殊功能,而以下是常見的功能。

    Load balancing
    將負載適當的分攤到不同的 service 上,讓伺服器可以服務更多的使用者。
    以 Traefik 為範例,以下設定是將 Request 送到不同的 serivce 上:
    ## Dynamic configuration
    http:
      services:
        my-service:
          loadBalancer:
            servers:
            - url: "http://<private-ip-server-1>:<private-port-server-1>/"
            - url: "http://<private-ip-server-2>:<private-port-server-2>/"

    Authentication and Authorization
    API Gateway 通常會有 Basic Authentication 的功能,Client 提供帳號、密碼才可以存取;甚至更進階的有提供 JWT Authentication,提供 JWT 才可以存取。
    以下是 Traefik 設定 Basic Authentication,設定了兩位使用者(帳號、密碼分別是 test/test, test2/test2):
    # Declaring the user list
    apiVersion: traefik.containo.us/v1alpha1
    kind: Middleware
    metadata:
      name: test-auth
    spec:
      basicAuth:
        secret: authsecret
    ---
    # Note: in a kubernetes secret the string (e.g. generated by htpasswd) must be base64-encoded first.
    # To create an encoded user:password pair, the following command can be used:
    # htpasswd -nb user password | openssl base64
    apiVersion: v1
    kind: Secret
    metadata:
      name: authsecret
      namespace: default
    data:
      users: |2
        dGVzdDokYXByMSRINnVza2trVyRJZ1hMUDZld1RyU3VCa1RycUU4d2ovCnRlc3QyOiRhcHIxJGQ5
        aHI5SEJCJDRIeHdnVWlyM0hQNEVzZ2dQL1FObzAK

    request routing
    API Gateway 收到 HTTP Request 後,可以根據 HTTP resource path 決定將 HTTP Request 送到內部網路的服務上,比如 https://www.company.com.tw/api/auth 將 HTTP Request 送到內部網路的 auth service;https://www.company.com.tw/api/order 將 HTTP Request 送到內部網路的 order service。

    protocol translation
    當 API Gateway 轉發 HTTP Request 的時候,可能內部服務並不是使用 HTTP 通訊協定,比如可能使用 gRPC、TCP、UDP 等等,API Gateway 可以將 HTTP Request 轉換成 gRPC、TCP、UDP 後,送給內部的服務。

    Rate-Limiting
    Rate-Limiting 可以限制 API 請求的頻率,比如全部的使用者每分鐘只能呼叫 API 10000 次;限制免費使用者每月只能呼叫 1000 次 API。

    IP Listing
    可以設定 IP 黑名單、白名單。以下是 Traefik 的設定:
    apiVersion: traefik.containo.us/v1alpha1
    kind: Middleware
    metadata:
      name: test-ipwhitelist
    spec:
      ipWhiteList:
        sourceRange:
          - 127.0.0.1/32
          - 192.168.1.7

    monitoring
    提供監控的功能,比如提供 Prometheus, Datadog, InfluxDB, StatsD 的 Metrics。

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.