All Products
Search
Document Center

Alibaba Cloud Service Mesh:Konfigurasikan gerbang keluar terpadu untuk traffic mesh

Last Updated:Jun 22, 2026

Saat aplikasi dalam mesh Anda perlu berkomunikasi dengan layanan eksternal, Anda dapat menggunakan egress gateway sebagai titik keluar terpusat untuk mengelola seluruh outbound traffic. Konfigurasi egress gateway memungkinkan penerapan kontrol keamanan dan kebijakan routing, sehingga meningkatkan keamanan dan observabilitas aplikasi Anda.

Penting

Sebelum membaca artikel ini, pastikan Anda telah memahami konten dalam Gunakan ASMEgressTrafficPolicy untuk mengelola egress traffic. Artikel ini menggunakan resource Service Mesh untuk secara transparan mengintersepsi permintaan ke layanan di luar kluster dan mengarahkannya ke egress gateway. Egress gateway kemudian menerapkan kebijakan keamanan dan meneruskan permintaan tersebut ke layanan eksternal. Konfigurasi ini relatif kompleks. Jika konten dalam Gunakan ASMEgressTrafficPolicy untuk mengelola egress traffic tidak memenuhi kebutuhan Anda, rujuk artikel ini.

Prasyarat

Proses konfigurasi

配置流程

Langkah 1: Deploy aplikasi contoh

  1. Deploy aplikasi sleep.

    1. Buat file bernama sleep.yaml dengan konten berikut.

      sleep.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "infinity"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. Menggunakan KubeConfig untuk kluster ACK Anda, jalankan perintah berikut untuk mendeploy aplikasi sleep.

      Untuk informasi lebih lanjut tentang cara menggunakan kubectl untuk mengelola kluster, lihat Dapatkan KubeConfig kluster dan gunakan kubectl untuk terhubung ke kluster.

      kubectl apply -f sleep.yaml
  2. Jalankan perintah berikut untuk membuka shell di Pod sleep dan mengakses layanan eksternal.

    Anda dapat menjalankan perintah kubectl get pod -n default untuk melihat nama Pod sleep.

    kubectl exec -it ${sleep-pod-name} -- /bin/sh
    curl aliyun.com -I

    Contoh output:

    HTTP/1.1 301 Moved Permanently
    server: envoy
    date: Thu, 14 Dec 2023 03:05:41 GMT
    content-type: text/html
    content-length: 239
    location: https://aliyun.com/
    eagleeye-traceid: 0b57ff8717025231418255220e****
    timing-allow-origin: *
    x-envoy-upstream-service-time: 69

    Tanggapan 301 menunjukkan bahwa aplikasi dalam mesh dapat mengakses layanan eksternal. Secara default, Pod menggunakan HTTP untuk akses dan situs web mengembalikan redirect.

    Catatan

    Pendekatan ini tidak memberikan kontrol keamanan dan mencegah penggunaan fitur observabilitas mesh. Kami merekomendasikan agar Anda mengaktifkan REGISTRY_ONLY untuk membatasi akses hanya ke layanan yang terdaftar dan menggunakan egress gateway sebagai titik keluar terpadu untuk traffic, seperti yang dijelaskan dalam langkah-langkah berikut.

(Opsional) Langkah 2: Aktifkan REGISTRY_ONLY

Kebijakan outbound traffic default untuk ASM adalah ALLOW_ANY. Kami merekomendasikan mengubahnya menjadi REGISTRY_ONLY. Dalam mode ini, proxy sidecar memblokir akses ke host eksternal mana pun yang tidak memiliki ServiceEntry yang sesuai dalam mesh. Konfigurasi ini meningkatkan keamanan aplikasi.

Catatan
  • Jika Anda mengaktifkan REGISTRY_ONLY tetapi belum membuat ServiceEntry untuk layanan eksternal, akses ke layanan tersebut akan ditolak.

  • Jika Anda tidak mengaktifkan REGISTRY_ONLY dan belum membuat ServiceEntry, Anda tetap dapat mengakses layanan eksternal, tetapi konfigurasi egress gateway Anda tidak akan berlaku.

  1. Login ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Data Plane Component Management > Sidecar Proxy Setting.

  3. Pada halaman Configure the agent parameters of the injected Sidecar, klik tab global, klik Outbound Traffic Policy, atur Outbound Traffic Policy menjadi REGISTRY_ONLY, lalu klik Update Settings.

  4. Jalankan perintah berikut untuk membuka shell di Pod sleep dan mengakses layanan eksternal.

    kubectl exec -it ${sleep-pod-name} -- /bin/sh
    curl aliyun.com -I

    Contoh output:

    HTTP/1.1 502 Bad Gateway
    date: Thu, 14 Dec 2023 03:08:46 GMT
    server: envoy
    transfer-encoding: chunked

    Tanggapan 502 menunjukkan bahwa aplikasi dalam mesh tidak dapat mengakses layanan eksternal yang tidak terdaftar.

Langkah 3: Buat ServiceEntry untuk layanan eksternal

Untuk mengakses layanan di luar kluster melalui egress gateway, Anda harus membuat ServiceEntry untuk layanan eksternal tersebut.

  1. Login ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Cluster & Workload Management > External Service(ServiceEntry). Pada halaman yang muncul, klik Create from YAML.

  3. Pada halaman Create, pilih Namespaces tempat aplikasi sleep berada, pilih Access mesh external services untuk Scenario Template, konfigurasi YAML seperti pada contoh berikut, lalu klik Create.

    apiVersion: networking.istio.io/v1beta1
    kind: ServiceEntry
    metadata:
      name: external-svc-http
    spec:
      hosts:
      - aliyun.com
      location: MESH_EXTERNAL
      ports:
      - number: 80
        name: http
        protocol: HTTP
      resolution: DNS
  4. Jalankan perintah berikut untuk membuka shell di Pod sleep dan mengakses layanan eksternal.

    kubectl exec -it ${sleep-pod-name} -- /bin/sh
    curl aliyun.com -I

    Tanggapan 301 menunjukkan bahwa aplikasi kini dapat mengakses layanan eksternal. Karena Anda telah mendaftarkan aliyun.com dengan ServiceEntry dalam mesh, akses diperbolehkan. Pada tahap ini, outbound traffic masih mengalir langsung dari Pod, bukan melalui egress gateway.

Langkah 4: Arahkan traffic melalui egress gateway

Karena Anda telah membuat ServiceEntry untuk aliyun.com, Anda dapat menggunakan resource seperti VirtualService dan Gateway untuk mengelola traffic ke aliyun.com.

  1. Buat egress gateway yang mendengarkan traffic HTTP pada Port 80. Untuk informasi lebih lanjut, lihat Buat egress gateway.

  2. Buat resource Gateway sebagai berikut. Untuk informasi lebih lanjut, lihat Kelola Istio gateway.

    Pada halaman pembuatan Gateway, atur Namespace menjadi default dan Name menjadi egress-gw. Di area Gateway instance, atur Label key menjadi istio dan Label value menjadi egressgateway. Di area Exposed services, atur Name layanan menjadi http, Port menjadi 80, Protocol menjadi HTTP, dan Service Domain menjadi aliyun.com. Lalu, klik Create.

  3. Gunakan YAML berikut untuk membuat VirtualService. Untuk informasi lebih lanjut, lihat Kelola VirtualServices.

    VirtualService YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: egressgateway-vs
    spec:
      hosts:
      - aliyun.com
      gateways:
      - egress-gw  # Nama Gateway yang Anda buat pada langkah sebelumnya.
      - mesh
      http:
      - match:
        - gateways:
          - mesh
          port: 80
        route:
        - destination:
            host: istio-egressgateway.istio-system.svc.cluster.local
            port:
              number: 80
          weight: 100
      - match:
        - gateways:
          - egress-gw
          port: 80
        route:
        - destination:
            host: aliyun.com
            port:
              number: 80
          weight: 100
  4. Uji akses ke layanan eksternal.

    1. Jalankan perintah berikut untuk membuka shell di Pod sleep dan mengakses layanan eksternal.

      kubectl exec -it ${sleep-pod-name} -- /bin/sh
      curl aliyun.com -I

      Tanggapan 301 menunjukkan bahwa aplikasi masih dapat mengakses layanan eksternal. Aplikasi kini mengarahkan traffic melalui egress gateway, bukan mengakses layanan langsung dari Pod.

    2. Jalankan perintah berikut untuk memeriksa log akses di Pod gateway.

      Catatan
      • Jika egress gateway Anda memiliki beberapa replika, log akses mungkin muncul di salah satu Pod tersebut. Anda mungkin perlu memeriksa setiap Pod gateway untuk menemukan entri tersebut.

      • Jika Anda telah mengaktifkan logging akses untuk egress gateway, Anda juga dapat melihat catatan akses di Konsol Simple Log Service.

      kubectl -n istio-system logs ${egress-gateway-pod-name} -c istio-proxy | grep aliyun.com | tail -n 1

      Contoh output:

      {"trace_id":null,"upstream_host":"106.11.XXX.XX:80","downstream_remote_address":"10.34.0.140:47942","requested_server_name":null,"response_code":301,"upstream_service_time":"24","user_agent":"curl/7.86.0-DEV","path":"/","route_name":null,"bytes_sent":0,"response_flags":"-","upstream_local_address":"10.34.0.141:60388","duration":24,"upstream_cluster":"outbound|80||aliyun.com","upstream_transport_failure_reason":null,"authority":"aliyun.com","request_id":"55789d59-9b81-4e39-b64a-66baf44e****","protocol":"HTTP/1.1","bytes_received":0,"method":"HEAD","downstream_local_address":"10.34.0.141:80","start_time":"2022-11-30T08:03:01.315Z","istio_policy_status":null,"x_forwarded_for":"10.34.0.140"}

      Bidang downstream_remote_address menunjukkan alamat IP Pod sleep.

      Setelah menyelesaikan langkah-langkah ini, seluruh outbound traffic ke layanan eksternal diarahkan melalui egress gateway.

Dokumen terkait