Cara kerja Bridge to Kube

Bridge to Kubernetes adalah alat pengembangan berulang untuk menulis aplikasi layanan mikro yang menargetkan Kubernetes. Ekstensi Bridge to Kubernetes tersedia untuk Visual Studio dan Visual Studio Code (VS Code).

Bridge to Kubernetes memungkinkan Anda menjalankan dan menelusuri kesalahan kode pada komputer pengembangan. Komputer tersebut tetap terhubung ke kluster Kubernetes dengan aplikasi atau layanan Anda yang lain. Jika Anda memiliki arsitektur layanan mikro besar dengan banyak layanan dan database yang saling bergantung, mereplikasi dependensi tersebut pada komputer pengembangan Anda mungkin akan sulit. Membangun dan menyebarkan kode ke kluster Kubernetes untuk setiap perubahan kode mungkin lambat, memakan waktu, dan sulit.

Bridge to Kubernetes membuat koneksi antara komputer pengembangan dan kluster Anda. Pendekatan ini menghindari keperluan membangun dan menyebarkan kode Anda ke kluster Anda. Anda dapat menguji dan mengembangkan layanan Anda dalam konteks, terhubung ke kluster Anda. Pendekatan ini memungkinkan Anda untuk men-debug tanpa membuat konfigurasi Docker atau Kubernetes lebih jauh.

Bridge to Kubernetes mengalihkan lalu lintas antara kluster Kubernetes yang terhubung dan komputer pengembangan Anda. Kode dan layanan lokal di kluster Kubernetes Anda dapat berkomunikasi seolah-olah mereka berada di kluster Kubernetes yang sama.

Bridge to Kubernetes memungkinkan Anda mereplikasi variabel lingkungan dan volume yang dipasang di kluster Kubernetes ke komputer pengembangan Anda. Akses ke variabel lingkungan dan volume yang terpasang memungkinkan Anda bekerja dengan kode tanpa mereplika dependensi tersebut.

Persyaratan

Catatan

Bridge ke Kubernetes tidak berfungsi dengan kluster Docker for Desktop Kubernetes. Untuk menggunakan Bridge to Kubernetes, Anda memerlukan salah satu konfigurasi berikut:

Anda dapat menggunakan Bridge to Kubernetes untuk membuat koneksi ke kluster Kubernetes. Koneksi ini mengalihkan lalu lintas ke dan dari pod yang ada di kluster ke komputer pengembangan Anda.

Catatan

Saat menggunakan Bridge to Kubernetes, Anda akan dimintai nama layanan untuk mengalihkan ke komputer pengembangan Anda. Opsi ini adalah cara mudah untuk mengidentifikasi pod untuk pengalihan. Semua pengalihan antara kluster Kubernetes dan komputer pengembangan Anda adalah untuk suatu pod. Untuk informasi selengkapnya, lihat Membuat layanan tersedia.

Di VS Code, Bridge to Kubernetes mendukung semua bahasa selama Anda dapat menjalankannya secara lokal. Dalam Visual Studio, Bridge to Kubernetes mendukung .NET Core. Bridge to Kubernetes tidak mendukung .NET Framework di Visual Studio karena memerlukan dukungan node Windows.

Perhatian

Bridge to Kubernetes dimaksudkan untuk digunakan hanya dalam skenario pengembangan dan pengujian. Ini tidak dimaksudkan atau didukung untuk digunakan dengan kluster produksi atau layanan langsung dalam penggunaan aktif.

Untuk fitur saat ini dan rencana di masa mendatang, lihat peta jalan Bridge to Kubernetes.

Membuat Sambungan

Ketika Bridge to Kubernetes membuat koneksi ke kluster Anda, dibutuhkan tindakan berikut:

  • Meminta Anda untuk mengonfigurasi layanan untuk diganti pada kluster Anda, port pada komputer pengembangan untuk digunakan untuk kode Anda, dan tugas peluncuran untuk kode Anda sebagai tindakan satu kali.
  • Mengganti kontainer dalam pod pada kluster dengan kontainer agen jarak jauh yang mengalihkan lalu lintas ke komputer pengembangan Anda.
  • Menjalankan kubectl port-forward pada komputer pengembangan Anda untuk meneruskan lalu lintas dari komputer pengembangan Anda ke agen jarak jauh yang berjalan di kluster Anda.
  • Mengumpulkan informasi lingkungan dari kluster Anda menggunakan agen jarak jauh. Informasi lingkungan ini mencakup variabel lingkungan, layanan yang tampak, pemasangan volume, dan pemasangan rahasia.
  • Menyiapkan lingkungan di Visual Studio sehingga layanan pada komputer pengembangan Anda dapat mengakses variabel yang sama seolah-olah berjalan pada kluster.
  • Memperbarui file host Anda untuk memetakan layanan di kluster Anda ke alamat IP lokal di komputer pengembangan Anda. Entri file host ini memungkinkan kode yang berjalan di komputer pengembangan Anda untuk membuat permintaan ke layanan lain yang berjalan di kluster Anda. Untuk memperbarui file host Anda, Bridge to Kubernetes memerlukan akses administrator di komputer pengembangan Anda.
  • Mulai menjalankan dan men-debug kode Anda di komputer pengembangan Anda. Jika perlu, Bridge to Kubernetes membebaskan port yang diperlukan pada komputer pengembangan Anda dengan menghentikan layanan atau proses yang saat ini menggunakan port tersebut.

Menggunakan Bridge to Kubernetes

Setelah Anda membuat koneksi ke kluster Anda, jalankan dan debug kode secara natif di komputer Anda, tanpa kontainerisasi. Kode berinteraksi dengan kluster Anda. Setiap lalu lintas jaringan yang diterima agen jarak jauh dialihkan ke port lokal yang ditentukan selama koneksi. Kode anda yang berjalan secara natif dapat menerima dan memproses lalu lintas tersebut. Variabel lingkungan, volume, dan rahasia dari kluster Anda tersedia untuk kode yang berjalan di komputer pengembangan Anda.

Bridge to Kubernetes menambahkan entri file host dan penerusan port ke komputer pengembang Anda. Kode Anda dapat mengirim lalu lintas jaringan ke layanan yang berjalan di kluster Anda menggunakan nama layanan dari kluster Anda. Lalu lintas tersebut diteruskan ke layanan yang berjalan di kluster Anda. Lalu lintas dirutekan antara komputer pengembangan dan kluster Anda sepanjang waktu saat Anda terhubung.

Selain itu, Bridge to Kubernetes menyediakan cara untuk mereplikasi variabel lingkungan dan file yang dipasang yang tersedia untuk pod di kluster Anda di komputer pengembangan melalui file KubernetesLocalProcessConfig.yaml. Anda juga dapat menggunakan file ini untuk membuat variabel lingkungan dan pemasangan volume baru.

Catatan

Selama durasi koneksi ke kluster, ditambah 15 menit, Bridge to Kubernetes menjalankan proses yang disebut EndpointManager dengan izin admin di komputer lokal Anda.

Anda dapat men-debug secara paralel, dengan beberapa layanan. Luncurkan sebanyak mungkin instans Visual Studio sebagai layanan yang ingin Anda debug. Pastikan layanan Anda mendengarkan port yang berbeda secara lokal. Konfigurasikan dan debug secara terpisah. Isolasi tidak didukung dalam skenario ini.

Konfigurasi tambahan

File KubernetesLocalProcessConfig.yaml memungkinkan Anda mereplikasi variabel lingkungan dan file yang dipasang yang tersedia untuk pod di kluster Anda. Saat Anda menggunakan Visual Studio, file KubernetesLocalConfig.yaml harus berada di direktori yang sama dengan file proyek untuk layanan. Untuk informasi selengkapnya, lihat Mengonfigurasi Bridge to Kubernetes.

Menggunakan kemampuan perutean untuk mengembangkan dalam isolasi

Secara default, Bridge to Kubernetes mengalihkan semua lalu lintas untuk layanan ke komputer pengembangan Anda. Sebagai gantinya, Anda dapat menggunakan kapabilitas perutean untuk hanya mengalihkan permintaan dari subdomain ke komputer pengembangan Anda. Kemampuan perutean ini memungkinkan Anda menggunakan Bridge to Kubernetes untuk berkembang dalam isolasi dan menghindari mengganggu lalu lintas lain di kluster Anda.

Animasi berikut menunjukkan dua pengembang yang bekerja pada kluster yang sama dalam isolasi:

Animation shows isolation, with two developers working with the same cluster.

Saat Anda mengaktifkan bekerja dalam isolasi, Bridge to Kubernetes melakukan tindakan berikut selain menyambungkan ke kluster Kubernetes Anda:

  • Verifikasikan bahwa kluster Kubernetes tidak memiliki Azure Dev Spaces yang aktif.
  • Mereplikasi layanan yang Anda pilih di kluster di namespace yang sama dan menambahkan label routing.visualstudio.io/route-from=SERVICE_NAME dan anotasi routing.visualstudio.io/route-on-header=kubernetes-route-as=GENERATED_NAME.
  • Mengonfigurasi dan memulai manajer perutean di namespace layanan yang sama pada kluster Kubernetes. Manajer perutean menggunakan pemilih label untuk mencari label routing.visualstudio.io/route-from=SERVICE_NAME dan anotasi routing.visualstudio.io/route-on-header=kubernetes-route-as=GENERATED_NAME saat mengonfigurasi perutean di namespace Anda.

Catatan

Bridge to Kubernetes memeriksa apakah Azure Dev Spaces diaktifkan pada kluster Kubernetes Anda. Ini meminta Anda untuk menonaktifkan Azure Dev Spaces sebelum Anda dapat menggunakan Bridge to Kubernetes.

Manajer perutean melakukan tindakan berikut saat dimulai:

  • Menduplikasi semua ingress, termasuk ingress load balancer, yang ditemukan di namespace menggunakan GENERATED_NAME untuk subdomain.
  • Membuat pod envoy untuk setiap layanan yang terkait dengan ingress duplikat dengan subdomain GENERATED_NAME.
  • Membuat pod envoy lain untuk layanan yang sedang Anda kerjakan dalam isolasi. Konfigurasi ini memungkinkan permintaan dengan subdomain untuk dirutekan ke komputer pengembangan Anda.
  • Mengonfigurasi aturan perutean untuk setiap pod envoy guna menangani perutean untuk layanan dengan subdomain.

Diagram berikut menunjukkan kluster Kubernetes sebelum Bridge to Kubernetes tersambung ke kluster Anda:

Diagram of cluster without Bridge to Kubernetes.

Diagram berikut menunjukkan kluster yang sama dengan Bridge to Kubernetes yang diaktifkan dalam mode isolasi. Di sini, Anda dapat melihat layanan duplikat dan pod envoy yang mendukung perutean dalam isolasi.

Diagram of cluster with Bridge to Kubernetes enabled.

Ketika kluster menerima permintaan dengan subdomain GENERATED_NAME, kluster menambahkan header kubernetes-route-as=GENERATED_NAME ke permintaan. Pod envoy menangani perutean yang meminta ke layanan yang sesuai dalam kluster. Untuk permintaan ke layanan yang sedang dikerjakan dalam isolasi, kluster mengalihkan permintaan ke komputer pengembangan Anda oleh agen jarak jauh.

Ketika kluster menerima permintaan tanpa subdomain GENERATED_NAME, kluster tidak menambahkan header ke permintaan. Pod envoy menangani perutean yang meminta ke layanan yang sesuai dalam kluster. Untuk permintaan layanan yang sedang diganti, pod merutekannya ke layanan asli alih-alih agen jarak jauh.

Penting

Setiap layanan pada kluster Anda harus meneruskan header kubernetes-route-as=GENERATED_NAME saat membuat permintaan tambahan. Misalnya, ketika serviceA menerima permintaan, kemudian membuat permintaan ke serviceB sebelum mengembalikan respons. Dalam contoh ini, serviceA perlu meneruskan header kubernetes-route-as=GENERATED_NAME dalam permintaannya ke serviceB. Beberapa bahasa, seperti ASP.NET, mungkin memiliki metode untuk menangani penyebaran header.

Ketika Anda memutuskan sambungan dari kluster, secara default, Bridge to Kubernetes menghapus semua pod envoy dan layanan duplikat.

Catatan

Penyebaran dan layanan manajer perutean tetap berjalan di namespace layanan Anda. Untuk menghapus penyebaran dan layanan, jalankan perintah berikut untuk namespace layanan Anda.

kubectl delete deployment routingmanager-deployment -n NAMESPACE
kubectl delete service routingmanager-service -n NAMESPACE

Diagnostik dan pembuatan log

Saat menggunakan Bridge to Kubernetes untuk menyambungkan ke kluster, komputer Anda mencatat diagnostik. Ini menyimpannya di direktori TEMP komputer pengembangan Anda di folder Bridge to Kubernetes.

Autorisasi Kubernetes RBAC

Kubernetes menyediakan Access Control berbasis Peran (RBAC) untuk mengelola izin bagi pengguna dan grup. Untuk informasi selengkapnya, lihat dokumentasi Kubernetes. Anda dapat mengatur izin untuk kluster yang mendukung RBAC dengan membuat file YAML dan menggunakan kubectl untuk menerapkannya ke kluster.

Untuk mengatur izin pada kluster, buat atau ubah file YAML seperti permissions.yml. Gunakan namespace Anda untuk <namespace> dan pengguna dan grup yang memerlukan akses.

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: bridgetokubernetes-<namespace>
  namespace: development
subjects:
  - kind: User
    name: jane.w6wn8.k8s.ginger.eu-central-1.aws.gigantic.io
    apiGroup: rbac.authorization.k8s.io
  - kind: Group
    name: dev-admin
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: admin
  apiGroup: rbac.authorization.k8s.io

Terapkan izin tersebut menggunakan perintah berikut:

kubectl -n <namespace> apply -f <yaml file name>

Batasan

Bridge to Kubernetes memiliki batasan berikut:

  • Sebuah pod hanya boleh memiliki satu kontainer yang berjalan di pod tersebut agar Bridge to Kubernetes berhasil tersambung.
  • Saat ini, pod Bridge to Kubernetes harus berupa kontainer Linux. Kontainer Windows tidak didukung.
  • Bridge to Kubernetes memerlukan izin yang ditingkatkan untuk dijalankan pada komputer pengembangan Anda untuk mengedit file host Anda.
  • Bridge to Kubernetes tidak dapat digunakan pada kluster dengan Azure Dev Spaces yang diaktifkan.

Langkah berikutnya

Untuk mulai menggunakan Bridge to Kubernetes untuk terhubung ke komputer pengembangan lokal ke kluster, lihat Menggunakan Bridge to Kubernetes (VS) atau Menggunakan Bridge to Kubernetes (Visual Studio Code).