Perbedaan antara Container port dan targetport di Kubernetes?

Aug 17 2020

Apa container portbedanya targetportsdengan container di Kubernetes? Apakah mereka digunakan secara bergantian, jika demikian mengapa?

Saya menemukan potongan kode di bawah ini di mana containerPortdigunakan untuk menunjukkan portpada 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 containerPortparameter (di baris terakhir). Jadi, apa containerPortbedanya dengan ini targetport?

Sejauh yang saya tahu, istilah itu portsecara umum mengacu portpada di service(Kubernetes). Koreksi saya jika saya salah.

Jawaban

4 mario Aug 18 2020 at 16:17

Singkatnya: targetPort dan containerPortpada 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: Servicedan Podmasing - masing. Sementara tujuan containerPortdapat diperlakukan sebagai informasional murni, targetPortdiperlukan oleh Serviceyang mengekspos serangkaian Pods.

Penting untuk dipahami bahwa dengan mendeklarasikan containerPortdengan nilai spesifik di Pod/ Deploymentspesifikasi Anda, Anda tidak dapat memaksa Anda Poduntuk mengekspos port spesifik ini misalnya jika Anda menyatakan di containerPortlapangan bahwa nginx Anda Podmengekspos port 8080alih-alih default 80, Anda masih perlu mengkonfigurasi server nginx Anda di container Anda untuk mendengarkan di port ini.

Mendeklarasikan containerPortdi Podspesifikasi adalah opsional. Bahkan tanpa itu Anda Serviceakan tahu ke mana mengarahkan permintaan berdasarkan info yang telah dideklarasikan di dalamnya targetPort.

Perlu diingat bahwa tidak perlu mendeklarasikan targetPortdalam Servicedefinisi. Jika Anda menghilangkannya, defaultnya ke nilai yang Anda nyatakan port(yang merupakan portnya Servicesendiri).

2 ArghyaSadhu Aug 17 2020 at 10:05

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, targetPortdalam layanan perlu mencocokkan containerPortspesifikasi dalam pod karena itulah cara layanan mengetahui port kontainer mana yang menjadi tujuan untuk meneruskan lalu lintas.