Kubernetes Service
dapat memiliki targetPort
dan port
dalam definisi layanan:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Apa perbedaan antara port
dan targetPort
?
service
kubernetes
port
Yakub
sumber
sumber
Jawaban:
Layanan: Ini mengarahkan lalu lintas ke sebuah pod.
TargetPort: Ini adalah port sebenarnya tempat aplikasi Anda berjalan di dalam container.
Port: Terkadang aplikasi Anda di dalam container melayani layanan yang berbeda di port yang berbeda.
Contoh: Aplikasi sebenarnya dapat berjalan
8080
dan health check untuk aplikasi ini dapat berjalan di8089
port container. Jadi jika Anda menekan layanan tanpa port, ia tidak tahu ke port mana dari penampung itu harus mengalihkan permintaan. Layanan perlu memiliki pemetaan sehingga dapat mengenai pelabuhan tertentu dari kontainer.jika Anda mencapai
my-service:8089
lalu lintas yang diarahkan ke8080
penampung (targetPort). Demikian pula, jika Anda menekannya ,my-service:8443
maka akan dialihkan ke8085
penampung (targetPort). Tapi inimyservice:8089
internal klaster kubernetes dan bisa digunakan ketika satu aplikasi ingin berkomunikasi dengan aplikasi lain. Jadi untuk mengakses layanan dari luar cluster, seseorang perlu mengekspos port pada mesin host tempat kubernetes berjalan sehingga lalu lintas dialihkan ke port container. Ini adalahnode port
(port yang diekspos pada mesin host). Dari contoh di atas, Anda dapat mengakses layanan dari luar cluster (Postman atau klien lainnya) denganhost_ip:nodePort
Katakanlah mesin host Anda ip
10.10.20.20
Anda dapat menekan http, metrik, pelayanan kesehatan oleh10.10.20.20:30475
,10.10.20.20:31261
,10.10.20.20:30013
.Editan: Diedit sesuai komentar Raedwald .
sumber
port
dantargetPort
menjadi berbeda? Jadi misalnya melihat contoh Andahealth
, mengapa membuatport
8443
alih - alih8085
? Pada dasarnya, mengapa ada dua parameter, bukan hanya menampilkan semua yang adatargetPort
di layanan?Saya membantu untuk memikirkan hal-hal dari perspektif layanan .
nodePort
: Porta pada node tempat lalu lintas eksternal akan masukport
: Pelabuhan layanan initargetPort
Port target pada pod tujuan meneruskan lalu lintasLalu lintas masuk
nodePort
, diteruskan keport
layanan yang kemudian dirutekan ketargetPort
dalam pod.Perlu ditekankan lebih banyak
nodePort
tentang lalu lintas eksternal. Pod lain dalam cluster yang mungkin perlu mengakses layanan hanya akan digunakanport
, bukannodePort
karena akses internal saja ke layanan.Juga perlu dicatat bahwa jika
targetPort
tidak disetel, itu akan default ke nilai yang sama sepertiport
. Misalnya80:80
untuk port layanan yang80
menargetkan port kontainer80
.sumber
port
dantargetPort
. Anda benar-benar menghilangkan kebingungan itu.Jawaban yang diberikan @Manikanta P diatas benar. Namun, penjelasan tentang "Port" mungkin sedikit tidak jelas pada bacaan pertama. Saya akan menjelaskan dengan contoh:
Pertimbangkan Aplikasi Web dengan konten statisnya (halaman depan, gambar, dll) yang dihosting oleh httpd dan konten dinamis (mis. Respons terhadap permintaan, dll.) Yang dihosting oleh tomcat. Webserver (atau konten statis) dilayani oleh httpd di port
80
sedangkan Appserver (atau konten dinamis) dilayani oleh tomcat di port8080
.Apa yang diinginkan pengembang: Pengguna harus dapat mengakses Server Web dari luar TETAPI bukan Server Aplikasi dari luar.
Solusi: Jenis layanan Webserver di service.yml-nya adalah NodePort sedangkan jenis layanan Appserver di service.yml-nya adalah ClusterIP.
Kode untuk service.yml server web:
Kode untuk service.yml Appserver
Perhatikan juga, dalam
httpd.conf
file Webserver, kami akan menulis IP yang mengalihkan permintaan pengguna ke appserver. IP ini akan menjadi:host_IP:5050
.Sebenarnya apa yang terjadi disini? Seorang pengguna menulis
hostIP:30475
dan melihat halaman Webserver. Ini karena dilayani oleh httpd di port80
(targetport). Saat pengguna mengklik tombol, permintaan dibuat. Permintaan ini dialihkan ke Appserver karena dalamhttpd.conf
file, port5050
disebutkan dan ini adalah port tempat container Appserver dan conatainer Webserver berkomunikasi secara internal. Saat appserver menerima permintaan tersebut, appserver dapat melayani permintaan tersebut karena tomcat berjalan di dalamnya di porta8080
.sumber
httpd.conf
di "karena dalam file httpd.conf, port 5050 disebutkan"Jawaban ini untuk referensi dokumentasi Kubernetes selain jawaban lainnya:
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
sumber
Singkatnya
nodeport:
Mendengarkan permintaan eksternal pada semua node pekerja di nodeip: port dan meneruskan permintaan ke port.port:
Port layanan cluster internal untuk container dan mendengarkan permintaan masuk dari nodeport dan meneruskan ke targetPort.targetPort:
Terima permintaan dari port dan teruskan ke pod container (port) tempat ia mendengarkan. bahkan jika Anda tidak menentukan ini akan mendapatkan secara default nomor port yang sama dengan port.sumber
"Port target" adalah port tempat penampung Anda berjalan.
Port: port mengalihkan lalu lintas ke kontainer dari layanan.
Mengekspos penerapan
NodePort: adalah port yang memungkinkan layanan mengakses secara eksternal.
Semoga jawaban ini.
sumber
jika penampung mendengarkan pada port 9376, maka targetPort : 9376
jika layanan mendengarkan pada port 80, maka port : 80
Kemudian konfigurasi port layanan terlihat seperti di bawah ini
Terakhir, permintaan diterima ke port layanan , dan diteruskan ke targetPort pod.
sumber