Mengakses pod/layanan Kubernetes melalui satu IP (Lebih disukai Master Node)

Saya memiliki instalasi Kubernetes lokal dengan satu node master dan dua node pekerja. Apakah ada cara untuk mengakses semua layanan/pod yang akan diinstal di Kubernetes melalui ip node master?

Maksud saya adalah saya memiliki layanan pengujian yang berjalan pada port 30001 pada setiap pekerja dan saya ingin mengakses layanan ini seperti http://master-node:30001. Setiap bantuan dihargai.


person Mustafa Yılmaz    schedule 02.08.2017    source sumber


Jawaban (2)


Anda dapat menggunakan "kata kerja proxy" untuk mengakses node, pod, atau layanan melalui master. Hanya HTTP dan HTTPS yang dapat diproksi. Lihat dokumen ini dan ini dokumen .

person Eric Tune    schedule 02.08.2017
comment
Bukankah itu hanya untuk layanan bawaan? - person Mustafa Yılmaz; 03.08.2017
comment
Tidak, mengerti sekarang. Terima kasih! - person Mustafa Yılmaz; 03.08.2017

Ada beberapa cara untuk melakukannya:

  • Tentukan layanan NodePort Kubernetes
  • Gunakan perintah kubefwd atau penerusan port
  • Gunakan perintah proxy (Hanya mendukung HTTP & HTTPS)

Dalam jawaban ini, saya menjelaskan cara mendefinisikan Layanan NodePort.

Layanan NodePort dijelaskan seperti di bawah ini (Layanan - Kubernetes)

NodePort: Mengekspos Layanan pada setiap IP Node di port statis (NodePort). Layanan ClusterIP, yang dirutekan oleh Layanan NodePort, dibuat secara otomatis. Anda akan dapat menghubungi Layanan NodePort, dari luar cluster, dengan meminta :.

Berikut adalah contoh layanan NodePort untuk PostgreSQL:

apiVersion: v1
kind: Service
metadata:
  name: postgres
  namespace: postgres
  labels:
    app: postgres
spec:
  ports:
    - port: 5432
  type: NodePort
  selector:
    app: postgres

Bidang port berarti port layanan dan port target default. Ada juga kolom nodePort yang memungkinkan Anda memilih port untuk mengakses layanan dari luar cluster (melalui IP node dan nodePort)

Untuk melihat Port node (jika Anda tidak menentukannya dari manifes), Anda dapat menjalankan perintah:

kubectl get services -n postgres

Outputnya akan terlihat seperti:

NAME       TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE    SELECTOR
postgres   NodePort   10.96.156.75   <none>        5432:30864/TCP   6d9h   app=postgres

Dalam hal ini, nodePort adalah 30864, ini adalah port untuk mengakses layanan dari luar cluster.

Untuk mengetahui IP node, perintah yang digunakan adalah:

kubectl get nodes -o wide

Outputnya akan terlihat seperti:

NAME                    STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                                     KERNEL-VERSION   CONTAINER-RUNTIME
homedev-control-plane   Ready    master   30d   v1.19.1   172.18.0.2    <none>        Ubuntu Groovy Gorilla (development branch)   5.9.1-arch1-1    containerd://1.4.0

Jika yang Anda butuhkan hanyalah IP saja:

kubectl get nodes -o wide --no-headers | awk '{print $6}'

Dalam hal ini, IP node adalah 172.18.0.2. Oleh karena itu, untuk terhubung ke Postgres di cluster Kubernetes lokal dari mesin host Anda, perintahnya akan terlihat seperti ini:

psql -U postgres -h 172.18.0.2 -p 30864-d postgres
person duykhoa    schedule 26.11.2020