Cara mengakses aplikasi Kubernetes jarak jauh menggunakan penerusan port kubectl

Perlu men-debug aplikasi yang berjalan di cluster Kubernetes? Penerusan port adalah cara untuk terhubung ke pod yang tidak tersedia untuk umum. Anda dapat menggunakan teknik ini untuk memeriksa database, alat pemantauan, dan aplikasi lain yang ingin Anda publikasikan secara internal tanpa jalur publik.

Penerusan port terintegrasi ke dalam Kubectl. CLI dapat memulai sesi tunneling yang mengarahkan lalu lintas pada port lokal ke pod di cluster Kubernetes Anda. Berikut cara mengaturnya.

Beginilah cara kerja penerusan port

Penerusan port adalah jenis aturan Terjemahan Alamat Jaringan (NAT) yang mengarahkan lalu lintas dari satu jaringan ke jaringan lain. Dalam konteks Kubernetes, permintaan yang tampaknya selesai akan diteruskan localhost ke intranet grup Anda.

Penerusan port hanya berfungsi di tingkat port. Anda meneruskan port tertentu, misalnya 33060 Ke pelabuhan tujuan seperti 3306 dalam jaringan sasaran. Saat mengirim lalu lintas ke port lokal Anda 33060Secara otomatis diarahkan ke port 3306 Pada akhirnya.

Teknologi ini memungkinkan Anda mengakses beban kerja Kubernetes pribadi yang tidak terdeteksi oleh NodePort, Ingress, atau LoadBalancer. Anda dapat mengarahkan lalu lintas lokal ke cluster Anda, sehingga tidak perlu membuat layanan Kubernetes untuk beban kerja internal Anda. Ini mengurangi permukaan serangan Anda.

Kirim formulir aplikasi

Sekarang mari kita lihat penerusan port Kubernetes beraksi. Pertama, buat penerapan sederhana yang akan Anda sambungkan menggunakan penerusan porta di bagian berikutnya.

Kami akan menggunakan stan database MySQL sebagai contoh nyata saat Anda mungkin perlu menggunakan teknik ini. Basis data tidak ditampilkan secara publik, sehingga administrator Kubernetes sering menggunakan penerusan porta untuk terhubung secara langsung.

Buat file YAML untuk posting Anda:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:8.0
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: mysql

Pastikan untuk mengubah nilai MYSQL_ROOT_PASSWORD variabel lingkungan sebelum menggunakan pernyataan ini dalam produksi. kabur dari kubectl apply Untuk membuat penerapan MySQL Anda sendiri:

$ kubectl apply -f mysql.yaml
deployment.apps/mysql created

Kemudian gunakan file get pods Perintah untuk memverifikasi bahwa beban kerja telah dimulai dengan sukses:

$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
mysql-5f54dd5789-t5fzc   1/1     Running   0          2s

Gunakan kubectl untuk mendorong ke Kubernetes

Meskipun MySQL sekarang berjalan di cluster Anda, Anda tidak memiliki cara untuk mengaksesnya dari luar. Selanjutnya, atur sesi penerusan porta sehingga Anda dapat menggunakan penginstal lokal seperti mysql CLI untuk terhubung ke database Anda.

Berikut ini contoh sederhana:

$ kubectl port-forward deployment/mysql 33060:3306
Forwarding from 127.0.0.1:33060 -> 3306
Forwarding from [::1]:33060 -> 3306

Koneksi pada port 33060 diteruskan ke port 3306 dari pod yang menjalankan penerapan MySQL. Anda sekarang dapat memulai sesi shell MySQL yang menargetkan database Kubernetes Anda:

$ mysql --host 127.0.0.1 --port 33060 -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 10
Server version: 8.0.29 MySQL Community Server - GPL

Terus nyalakan jendela shell kubectl port-forward Pesanan terbuka selama sesi debug. Penerusan port berakhir saat Anda menekan Ctrl + C atau menutup jendela.

Ubah nomor port lokal dan jarak jauh

Sintaks untuk binding nomor port adalah local:remote. ini 33060:3306 Contoh di atas memetakan port 33060 localhost di 3306 di satuan sasaran.

Jika Anda menentukan nomor tanpa titik dua, itu ditafsirkan sebagai port lokal dan port jarak jauh:

$ kubectl port-forward deployment/mysql 3306

Anda juga dapat membiarkan port lokal kosong untuk secara otomatis menetapkan port acak:

$ kubectl port-forward deployment/mysql :3306
Forwarding from 127.0.0.1:34923 -> 3306
Forwarding from [::1]:34923 -> 3306

Di sini Anda dapat menggunakan nomor port yang dibuat secara acak 34923 Dengan klien MySQL lokal Anda.

Ubah alamat mendengarkan

Kubectl menghubungkan port lokal ke 127.0.0.1 (IPv4) dan ::1 (IPv6) secara default. Sebagai alternatif, Anda dapat menentukan kumpulan alamat IP Anda sendiri dengan menyediakannya --address Tandai saat memutar file port-forward Memerintah:

# Listen on two IPv4 addresses
$ kubectl port-forward deployment/mysql :3306 --address 127.0.0.1,192.168.0.1

Tag hanya menerima alamat IP dan localhost kata kunci. Yang terakhir ini ditafsirkan untuk memasukkan 127.0.0.1 Dan ::1Yang sesuai dengan standar untuk perintah if --address sudah dihapus.

Ringkasan

Penerusan port adalah teknik yang berguna untuk mengakses aplikasi pribadi di klaster Kubernetes Anda. Kubectl merutekan lalu lintas dari jaringan lokal Anda ke port tertentu pada pod tertentu. Ini adalah mekanisme yang relatif sederhana yang dapat menangani koneksi TCP apa pun. Penerusan port UDP belum didukung.

Menggunakan sesi penerusan port kustom adalah cara aman untuk men-debug beban kerja yang tidak perlu diekspos secara eksternal. Membuat layanan untuk setiap penerapan baru dapat memungkinkan peretas dan penyerang mengetahui titik akhir mana yang harus dilindungi. Dengan penerusan porta di kubectl Anda dapat terhubung ke aplikasi Anda dengan aman dan langsung tanpa harus mengetahui node mana yang menjalankannya.

Baca Juga!

Beberapa kartu grafis RTX 4090 merekomendasikan catu daya yang lebih tinggi daripada instruksi Nvidia

Kesimpulan: Nvidia telah menetapkan rekomendasi catu dayanya sendiri untuk kartu grafis seri RTX 40 baru, …