All Products
Search
Document Center

Alibaba Cloud Service Mesh:Implementasi Pengembangan dan Pengujian Lokal Menggunakan KT-Connect dan ASM

Last Updated:Jun 28, 2025

KT-Connect ("KT" adalah singkatan dari "Kubernetes Toolkit") adalah alat utilitas yang membantu Anda bekerja lebih efisien dengan lingkungan pengembangan Kubernetes. Proxy KT-Connect memanfaatkan fitur manajemen lalu lintas di konsol Alibaba Cloud Service Mesh (ASM) untuk men-debug aplikasi lokal serta mempercepat pengembangan dan pengujian lokal. Topik ini menjelaskan cara mengimplementasikan pengembangan dan pengujian lokal menggunakan KT-Connect dan ASM.

Latar Belakang

KT-Connect adalah alat open source yang dirancang untuk menyederhanakan proses pengembangan di kluster Kubernetes. Alat ini memungkinkan Anda menerapkan pod proxy di kluster Kubernetes untuk mengarahkan ulang lalu lintas yang ditujukan ke layanan tertentu ke aplikasi lokal, sehingga memungkinkan akses timbal balik antara lingkungan lokal dan kluster Kubernetes. Fitur inti KT-Connect meliputi:

  • Mendukung akses ke kluster Kubernetes dari aplikasi lokal.

    KT-Connect membuat semua sumber daya kluster dapat diakses dari aplikasi lokal tanpa modifikasi apa pun.

  • Mendukung resolusi nama domain internal untuk layanan Kubernetes secara lokal.

    Langsung menyelesaikan nama layanan menjadi alamat IP kluster tempat layanan berada, memberikan pengalaman cloud-native sejati untuk pengembangan lokal.

  • Mendukung pengalihan lalu lintas yang ditentukan untuk layanan kluster ke layanan di lingkungan lokal.

    Mengarahkan permintaan ke layanan tertentu dalam kluster ke aplikasi lokal, sehingga semua aplikasi lokal dapat langsung diakses dari layanan kluster.

  • Mendukung kolaborasi dalam lingkungan pengujian antara beberapa pengguna tanpa gangguan.

    Anda dapat mengonfigurasi aturan routing untuk mengarahkan hanya permintaan tertentu ke aplikasi lokal tanpa memengaruhi ketersediaan lingkungan.

  • Mendukung lingkungan pengembangan Windows/MacOS/Linux.

    Berbagai sistem operasi dengan metode penggunaan yang sama memungkinkan pengembang untuk mengakses layanan kluster Kubernetes.

Prasyarat

Persiapan

Contoh ini mendemonstrasikan skenario berikut:

  • Terapkan aplikasi helloworld v1 di kluster dan konfigurasikan kebijakan lalu lintas untuk aplikasi tersebut.

  • Gunakan Docker untuk menerapkan aplikasi helloworld v2 di lingkungan lokal. Jalankan perintah ktctl untuk menerapkan pod proxy di kluster guna mengaktifkan koneksi ke kluster dari lingkungan lokal.

  • Perbarui kebijakan routing untuk mengarahkan lalu lintas ke aplikasi v1 di kluster dan aplikasi v2 di lingkungan lokal berdasarkan header permintaan.

  1. Instal dan konfigurasikan ktctl.

  2. Buat namespace di kluster.

    kubectl create ns mesh-demo
  3. Aktifkan injeksi sidecar otomatis untuk namespace tersebut.

    kubectl label ns mesh-demo istio-injection=enabled

Prosedur

Langkah 1: Terapkan aplikasi dan konfigurasikan kebijakan routing

  1. Terapkan aplikasi di namespace mesh-demo.

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloworld
      labels:
        app: helloworld
        version: v1
        stage: online
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: helloworld 
          version: v1
          stage: online
      template:
        metadata:
          labels:
            app: helloworld 
            version: v1
            stage: online
        spec:
          containers:
          - name: helloworld 
            env:
            - name: PODIP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: STAGE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.labels['stage']
            - name: VERSION 
              valueFrom:
                fieldRef:
                  fieldPath: metadata.labels['version']
            command: ["/http-echo"]
            args:
              - "-text"
              - "Selamat datang di helloworld stage: $(STAGE), versi: $(VERSION), ip: $(PODIP)"
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/asm-http-echo:1.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 5678
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: helloworld
      labels:
        app: helloworld
        service: helloworld
    spec:
      ports:
      - port: 8000
        name: http
        targetPort: 5678
      selector:
        app: helloworld
    EOF
  2. Terapkan kebijakan routing.

    kubectl apply -f - <<EOF
    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: helloworld-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - 'helloworld.mesh.com'
        port:
          name: http
          number: 80
          protocol: HTTP
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: helloworld
    spec:
      host: helloworld
      subsets:
      - name: v1
        labels:
          version: v1
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: helloworld
    spec:
      gateways:
      - helloworld-gateway
      hosts:
      - helloworld.mesh.com
      http:
      - route:
        - destination:
            host: helloworld
            subset: v1
    EOF
  3. Verifikasi apakah kebijakan tersebut berlaku.

    export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    curl ${INGRESS_HOST} -H 'host: helloworld.mesh.com'

    Output yang Diharapkan:

    Selamat datang di helloworld stage: online, versi: v1, ip: 172.23.16.246

    Output menunjukkan bahwa stage adalah online dan versi adalah v1, sesuai yang diharapkan.

Langkah 2: Terapkan lingkungan pengembangan lokal

  1. Terapkan aplikasi helloworld v2 menggunakan Docker.

    docker run -itd --rm \
        --name local-container \
        -p 5678:5678 \
        registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/asm-http-echo:1.0 \
        -text "Selamat datang di helloworld stage: local, versi: v2, ip: 127.0.0.1"
  2. Terapkan proxy KT-Connect di kluster. Dengan cara ini, pod proxy dengan label version=hzall diterapkan di namespace mesh-demo.

    ktctl -n mesh-demo mesh helloworld --expose 5678 --mode manual

    Output yang Diharapkan:

    4:22PM INF Menggunakan konteks kluster cluster-4KvcBF (kubernetes)
    4:22PM INF KtConnect 0.3.7 mulai pada 59150 (darwin amd64)
    4:22PM INF Mengambil waktu kluster ...
    4:22PM INF Menggunakan mode manual
    4:22PM INF Berhasil membuat config map helloworld-kt-mesh-hzall
    4:22PM INF Menerapkan pod shadow helloworld-kt-mesh-hzall di namespace mesh-demo
    4:22PM INF Menunggu pod helloworld-kt-mesh-hzall ...
    4:22PM INF Menunggu pod helloworld-kt-mesh-hzall ...
    4:22PM INF Pod helloworld-kt-mesh-hzall siap
    4:22PM INF Mengarahkan pod helloworld-kt-mesh-hzall ke lokal melalui port 5678
    4:22PM INF Port forward lokal:17982 -> pod helloworld-kt-mesh-hzall:22 berhasil
    4:22PM INF Terowongan balik 0.0.0.0:5678 -> 127.0.0.1:5678 berhasil
    4:22PM INF ---------------------------------------------------------
    4:22PM INF Sekarang Anda dapat memperbarui aturan Istio dengan label 'version=hzall' 
    4:22PM INF ---------------------------------------------------------
  3. Lihat pod proxy.

    kubectl get pod -n mesh-demo

    Output yang Diharapkan:

    NAME                         READY   STATUS    RESTARTS   AGE
    helloworld-5cbdxxxxx-xxxxx   2/2     Running   0          116m
    helloworld-kt-mesh-hzall     2/2     Running   0          106m

    Di mana, helloworld-kt-mesh-hzall adalah pod proxy yang diterapkan.

Langkah 3: Perbarui kebijakan routing dan verifikasi koneksi

  1. Perbarui kebijakan routing. Arahkan permintaan dengan header permintaan x-env=local ke aplikasi helloworld v2 di lingkungan lokal, dan arahkan semua permintaan lainnya ke aplikasi helloworld v1 di kluster.

    kubectl apply -f - <<EOF
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: helloworld
    spec:
      host: helloworld
      subsets:
      - name: v1
        labels:
          version: v1
      - name: local
        labels:
          version: hzall
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: helloworld
    spec:
      gateways:
      - helloworld-gateway
      hosts:
      - helloworld.mesh.com
      http:
      - match:
        - headers: 
            x-env:
              exact: local
        route:
        - destination:
            host: helloworld
            subset: local
      - route:
        - destination:
            host: helloworld
            subset: v1
    EOF
  2. Akses aplikasi lokal:

    curl ${INGRESS_HOST} -H 'host: helloworld.mesh.com' -H 'x-env: local'

    Output yang Diharapkan:

    Selamat datang di helloworld stage: local, versi: v2, ip: 127.0.0.1

    Output menunjukkan bahwa stage adalah local dan versi adalah v2. Ini menunjukkan bahwa konektivitas dua arah antara layanan di lingkungan lokal dan kluster berhasil dikonfigurasi, dan layanan lokal dapat diakses dari kluster.

  3. Akses aplikasi di kluster.

    curl ${INGRESS_HOST} -H 'host: helloworld.mesh.com'

    Output yang Diharapkan:

    Selamat datang di helloworld stage: online, versi: v1, ip: 172.23.16.246

(Opsional) Langkah 4: Bersihkan lingkungan

  1. Hapus sumber daya uji yang dibuat untuk kluster.

    kubectl delete ns mesh-demo
  2. Hentikan aplikasi lokal.

    docker stop local-container