All Products
Search
Document Center

Alibaba Cloud Service Mesh:Konfigurasikan kebijakan otorisasi untuk permintaan TCP

Last Updated:Mar 20, 2026

Untuk menerapkan kontrol yang lebih rinci atas permintaan TCP antar layanan, konfigurasikan kebijakan otorisasi untuk mengelola izin interaksi layanan. Ini memastikan bahwa hanya permintaan berwenang yang dapat mengakses layanan tertentu, sehingga meningkatkan keamanan dan keandalan layanan.

Prasyarat

Langkah 1: Sebarkan aplikasi sampel

Sebarkan aplikasi tcp-echo sebagai layanan TCP yang menerima permintaan dan aplikasi sleep sebagai layanan TCP yang mengirimkan permintaan.

  1. Sebarkan layanan TCP untuk menerima permintaan.

    1. Buat file tcp-echo.yaml dengan konten berikut.

      Setelah tcp-echo menerima permintaan, tcp-echo menambahkan isi permintaan dengan awalan hello dan mengembalikan isi yang telah diberi awalan sebagai respons. Sebagai contoh, jika tcp-echo menerima world, maka hello world akan dikembalikan.

      Kembangkan untuk melihat file tcp-echo.yaml

      apiVersion: v1
      kind: Service
      metadata:
        name: tcp-echo
        labels:
          app: tcp-echo
          service: tcp-echo
      spec:
        ports:
        - name: tcp
          port: 9000
        - name: tcp-other
          port: 9001
        selector:
          app: tcp-echo
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: tcp-echo
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tcp-echo
            version: v1
        template:
          metadata:
            labels:
              app: tcp-echo
              version: v1
          spec:
            containers:
            - name: tcp-echo
              image: docker.io/istio/tcp-echo-server:1.2
              imagePullPolicy: IfNotPresent
              args: [ "9000,9001,9002", "hello" ]
              ports:
              - containerPort: 9000
              - containerPort: 9001
    2. Gunakan kubectl untuk terhubung ke kluster. Jalankan perintah berikut untuk menyebarkan layanan tcp-echo sebagai layanan TCP untuk menerima permintaan di namespace foo.

      Untuk informasi lebih lanjut tentang cara menggunakan kubectl untuk terhubung ke kluster, lihat Dapatkan file kubeconfig dari kluster dan gunakan kubectl untuk terhubung ke kluster.

      kubectl apply -f tcp-echo.yaml -n foo
  2. Sebarkan layanan TCP untuk mengirimkan permintaan.

    1. Buat file sleep.yaml dengan konten berikut:

      Kembangkan untuk melihat file sleep.yaml

      #Layanan Sleep
      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", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. Jalankan perintah berikut untuk menyebarkan layanan sleep di namespace foo untuk mengirimkan permintaan TCP:

      kubectl apply -f sleep.yaml -n foo

Langkah 2: Periksa apakah layanan tcp-echo dapat diminta sesuai harapan sebelum kebijakan otorisasi dikonfigurasi

  1. Jalankan perintah berikut untuk memeriksa apakah permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9000:

    kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- sh -c 'echo "port 9000" | nc tcp-echo 9000' | grep "hello" && echo 'koneksi berhasil' || echo 'koneksi ditolak'

    Output yang diharapkan:

    hello port 9000
    koneksi berhasil

    Output ini menunjukkan bahwa permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9000.

  2. Jalankan perintah berikut untuk memeriksa apakah permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9001:

    kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- sh -c 'echo "port 9001" | nc tcp-echo 9001' | grep "hello" && echo 'koneksi berhasil' || echo 'koneksi ditolak'

    Output yang diharapkan:

    hello port 9001
    koneksi berhasil

    Output ini menunjukkan bahwa permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9001.

Langkah 3: Konfigurasikan kebijakan otorisasi

Lakukan langkah-langkah berikut untuk mengonfigurasi kebijakan otorisasi agar memperbolehkan permintaan TCP mengakses layanan tcp-echo melalui port 9000:

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

  2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih Mesh Security Center > AuthorizationPolicy.

  3. Buat kebijakan otorisasi dengan salah satu metode berikut:

    Penting

    Saat mengonfigurasi kebijakan otorisasi untuk permintaan TCP, jangan aktifkan saklar Methods di bagian Tambah Target Permintaan. Saklar ini hanya cocok untuk permintaan HTTP tetapi tidak untuk permintaan TCP. Aturan ALLOW yang diatur menggunakan saklar ini untuk permintaan TCP tidak valid. Service Mesh mengabaikan aturan ALLOW yang tidak valid. Oleh karena itu, jika Anda mengaktifkan saklar ini untuk permintaan TCP, permintaan TCP akan ditolak dan koneksi ditolak akan dikembalikan.

    Metode 1: Gunakan YAML untuk membuat kebijakan otorisasi

    1. Di halaman AuthorizationPolicy, klik Create from YAML.

    2. Di halaman Create, pilih foo dari daftar drop-down Namespace, pilih template, salin konten berikut ke editor kode YAML, lalu klik Create.

      kind: AuthorizationPolicy
      apiVersion: security.istio.io/v1beta1
      metadata:
        name: demo
        namespace: foo
      spec:
        action: ALLOW
        rules:
          - to:
              - operation:
                  ports:
                    - '9000'

    Metode 2: Gunakan antarmuka pengguna grafis (GUI) untuk membuat kebijakan otorisasi

    1. Di halaman AuthorizationPolicy, klik Create.

    2. Di halaman Create, atur parameter dan klik Create.

      Parameter

      Deskripsi

      Name

      Nama kebijakan otorisasi. Dalam contoh ini, nilai diatur menjadi demo.

      Policy Type

      Tindakan otorisasi. Dalam contoh ini, nilai diatur menjadi ALLOW.

      Namespace

      Namespace tempat Anda ingin membuat kebijakan otorisasi. Dalam contoh ini, parameter Namespace pada tab Workload Scope diatur menjadi foo.

      Effective Scope

      Cakupan efektif kebijakan otorisasi. Dalam contoh ini, nilai diatur menjadi Namespace Scope.

      Request Matching Rules

      Aturan pencocokan permintaan kebijakan otorisasi. Dalam contoh ini, Ports diaktifkan di bagian Add Request Target dan nilainya diatur menjadi 9000.

Langkah 4: Periksa apakah kebijakan otorisasi yang Anda buat berlaku

  1. Jalankan perintah berikut untuk memeriksa apakah permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9001:

    kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- sh -c 'echo "port 9001" | nc tcp-echo 9001' | grep "hello" && echo 'koneksi berhasil' || echo 'koneksi ditolak'

    Output yang diharapkan:

    koneksi ditolak

    Output ini menunjukkan bahwa permintaan dari layanan sleep gagal mengakses layanan tcp-echo melalui port 9001.

  2. Jalankan perintah berikut untuk memeriksa apakah permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9000:

    kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- sh -c 'echo "port 9000" | nc tcp-echo 9000' | grep "hello" && echo 'koneksi berhasil' || echo 'koneksi ditolak'

    Output yang diharapkan:

    hello port 9000
    koneksi berhasil

    Output ini menunjukkan bahwa permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9000.

Referensi