Perbedaan antara Container port dan targetport di Kubernetes?
Apa container port
bedanya targetports
dengan container di Kubernetes? Apakah mereka digunakan secara bergantian, jika demikian mengapa?
Saya menemukan potongan kode di bawah ini di mana containerPort
digunakan untuk menunjukkan port
pada pod di Kubernetes.
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
labels:
app: demo-voting-app
spec:
replicas: 1
selector:
matchLabels:
name: postgres-pod
app: demo-voting-app
template:
metadata:
name: postgres-pod
labels:
name: postgres-pod
app: demo-voting-app
spec:
containers:
- name: postgres
image: postgres:9.4
ports:
- containerPort: 5432
Dalam potongan kode di atas, mereka telah memberikan 5432 untuk containerPort
parameter (di baris terakhir). Jadi, apa containerPort
bedanya dengan ini targetport
?
Sejauh yang saya tahu, istilah itu port
secara umum mengacu port
pada di service
(Kubernetes). Koreksi saya jika saya salah.
Jawaban
Singkatnya: targetPort
dan containerPort
pada dasarnya mengacu pada port yang sama (jadi jika keduanya digunakan, keduanya diharapkan memiliki nilai yang sama) tetapi digunakan dalam dua konteks yang berbeda dan memiliki tujuan yang sama sekali berbeda.
Keduanya tidak dapat digunakan secara bergantian karena keduanya adalah bagian dari spesifikasi dua sumber daya / objek kubernetes yang berbeda: Service
dan Pod
masing - masing. Sementara tujuan containerPort
dapat diperlakukan sebagai informasional murni, targetPort
diperlukan oleh Service
yang mengekspos serangkaian Pods
.
Penting untuk dipahami bahwa dengan mendeklarasikan containerPort
dengan nilai spesifik di Pod
/ Deployment
spesifikasi Anda, Anda tidak dapat memaksa Anda Pod
untuk mengekspos port spesifik ini misalnya jika Anda menyatakan di containerPort
lapangan bahwa nginx Anda Pod
mengekspos port 8080
alih-alih default 80
, Anda masih perlu mengkonfigurasi server nginx Anda di container Anda untuk mendengarkan di port ini.
Mendeklarasikan containerPort
di Pod
spesifikasi adalah opsional. Bahkan tanpa itu Anda Service
akan tahu ke mana mengarahkan permintaan berdasarkan info yang telah dideklarasikan di dalamnya targetPort
.
Perlu diingat bahwa tidak perlu mendeklarasikan targetPort
dalam Service
definisi. Jika Anda menghilangkannya, defaultnya ke nilai yang Anda nyatakan port
(yang merupakan portnya Service
sendiri).
ContainerPort dalam spesifikasi pod
Daftar port yang akan diekspos dari container. Mengekspos port di sini memberi sistem informasi tambahan tentang koneksi jaringan yang digunakan container, tetapi utamanya bersifat informatif. Tidak menentukan port di sini JANGAN mencegah port tersebut terekspos
targetPort dalam spesifikasi layanan
Nomor atau nama port yang akan diakses di pod yang ditargetkan oleh layanan. Angka harus dalam kisaran 1 sampai 65535. Nama harus merupakan IANA_SVC_NAME. Jika ini adalah sebuah string, ia akan dicari sebagai port bernama di port kontainer Pod target. Jika ini tidak ditentukan, nilai bidang 'port' digunakan (peta identitas).
Oleh karena itu, targetPort
dalam layanan perlu mencocokkan containerPort
spesifikasi dalam pod karena itulah cara layanan mengetahui port kontainer mana yang menjadi tujuan untuk meneruskan lalu lintas.