Bagaimana cara mengekspos layanan Kubernetes menggunakan sumber daya Ingress?

Bagaimana cara mengekspos layanan Kubernetes menggunakan sumber daya Ingress?
Pintu masuk berarti tindakan masuk atau memasuki. Juga, sarana atau tempat pintu masuk atau pintu masuk.
Ini adalah karya a Sumber Daya Masuk Kubernetes.
Pendekatan primitif untuk mengekspos layanan ke dunia luar melibatkan layanan Kubernetes NodePort ke dunia luar.
Sebagai referensi, layanan port node adalah jenis layanan khusus di Kubernetes.
Untuk jenis layanan ini, setiap node cluster membuka port pada node itu sendiri. Setiap lalu lintas masuk yang diterima di port ini diarahkan ke layanan dasar dan pod terkait.
Tapi apa yang membuat Entri Kubernetes sumber daya khusus?
Ini karena Pintu masuk melakukan begitu banyak pengangkatan berat dalam hal fitur seperti:
- penyeimbang beban
- Pengakhiran SSL
- Hosting Berbasis Nama
- Beroperasi pada lapisan aplikasi jaringan
- Dukungan untuk beberapa layanan dengan satu alamat IP
Berikut adalah ikhtisar sumber daya Kubernetes Ingress.
Seperti yang Anda lihat, sumber daya Ingress dapat bertindak sebagai penjaga gerbang untuk beberapa layanan. Setiap layanan dapat didukung oleh banyak pod yang berjalan di node mereka sendiri. Untuk klien, semua detail ini tidak penting karena hanya akan berkomunikasi dengan sumber daya Ingress.
Mari kita lihat cara menyiapkannya sebagai demo dan melihatnya beraksi.
1 – Peran pengontrol pintu masuk
Sumber daya Ingress tidak bekerja sendirian.
Anda membutuhkannya pengontrol masukan berjalan di dalam cluster Anda. Pikirkan pengontrol ini sebagai otak di balik semua keajaiban di Ingress.
Sekarang pengontrol Ingress juga tidak sederhana. Lingkungan Kubernetes yang disediakan vendor berbeda menggunakan implementasi pengontrol yang berbeda. Beberapa bahkan tidak menyediakan pengontrol default.
Lagi pula, itu bukan ruang lingkup posting ini. Untuk tujuan demonstrasi kami, Anda dapat memeriksa apakah pengontrol Ingress sudah ada dengan memeriksa semua pod di kluster.
$ kubectl get po --all-namespaces
Saya akan mencari sesuatu seperti ini:
ingress-nginx ingress-nginx-controller-555596df87-4p46d 1/1 Running 1 (159m ago) 2d2h
Jika tidak ada apa-apa, jangan khawatir. Anda masih dapat menginstalnya sebagai add-on.
Berikut adalah perintah untuk menginstal ingress-nginx
pengontrol. Ini adalah implementasi tertentu dari pengontrol Ingress yang bekerja dengan baik di banyak kasus.
$ kubectl apply -f
Saat Anda menjalankan perintah di atas, bundel sumber daya dibuat.
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
serviceaccount/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
configmap/ingress-nginx-controller created
service/ingress-nginx-controller created
service/ingress-nginx-controller-admission created
deployment.apps/ingress-nginx-controller created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created
ingressclass.networking.k8s.io/nginx created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created
Wow, banyak sekali yang membuat Ingress berhasil. Tapi saya berjanji itu akan sia-sia.
Periksalah ingress-nginx
pod lagi dan biarkan pod yang diperlukan mulai bekerja untuk sementara waktu.
Setelah konfigurasi selesai, saatnya membuat resource Ingress.
2 – Membuat Sumber Daya Ingress Kubernetes
Di bawah ini adalah manifes YAML dari sumber daya Ingress yang baru:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-demo
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: kubernetes.docker.internal
http:
paths:
- path: /demo
pathType: Prefix
backend:
service:
name: nodeport-demo
port:
number: 80
Saya harap Anda ingin memahami apa yang sedang terjadi di sini.
Berikut rinciannya:
- ITU
apiVersion
Dankind
cukup jelas karena kami mencoba memberi tahu Kubernetes jenis sumber daya apa yang ingin kami buat. - Lalu ada
metadata
bagian. Dia memiliki sebuahname
untuk sumber daya Ingress. Kemudian kita memilikiannotations
bagian. - Anotasi
nginx.ingress.kubernetes.io/rewrite-target
menentukan URI target tempat lalu lintas masuk harus dialihkan. Ini adalah properti penting jadi jangan lewatkan. - Berikutnya yaitu
kubernetes.io/ingress.class
dimaksudkan untuk mengikat sumber daya Ingress ke pengontrol Ingress. Oleh karena itu nilai ‘nginx’. - Selanjutnya, kami memiliki
spec
bagian. Di sinilah keajaiban Ingress terjadi saat kita menentukanrules
yang akan mengatur routing. - Dalam
rules
bagian, Anda memilikihost
. saya menggunakankubernetes.docker.internal
karena itu adalah sesuatu yang tersedia di luar kotak. Dalamhost
kami memilikihttp
bagian yang berisi daftarpaths
. - Untuk setiap jalur, Anda harus menentukan nilai jalur, tipenya, dan nama layanan backend yang sesuai.
- Dalam contoh di atas, saya tunjukkan
/demo
jalur ke layanan bernamanodeport-demo
tersedia di port 80.
Dan pada dasarnya hanya itu yang dibutuhkan.
Perhatikan bahwa jika Anda menggunakan host lain seperti
demo.example.com
, Anda harus melakukan perubahan yang sesuai pada DNS sehingga DNS tersebut me-resolve nama domain ke alamat IP pengontrol masuknya. Jika Anda mencoba ini secara lokal di sesuatu seperti Docker Desktop, Anda dapat langsung menggunakannyakubernetes.docker.internal
sebagai nama tuan rumah.
Poin penting untuk diingat adalah bahwa kita juga dapat menggunakan Ingress yang sama untuk mengekspos beberapa layanan.
Juga, jika Anda mencari definisi dari Layanan Pelabuhan Nodeinilah YAML untuk itu juga.
apiVersion: v1
kind: Service
metadata:
name: nodeport-demo
spec:
type: NodePort
ports:
- port: 80
targetPort: 3000
nodePort: 30100
selector:
app: hello-service
Setelah Anda menerapkan sumber daya dan membuat perubahan pada DNS jika diperlukan, Anda benar-benar dapat melihat aksi Ingress.
Anda dapat pergi ke browser Anda dan mengunjungi URL dan jika ada aplikasi pendukung yang cocok maka akan terlihat responnya.
3 – Bagaimana sebenarnya cara kerja Kubernetes Ingress?
Sementara semuanya bekerja dengan baik, penting juga untuk memahami bagaimana sebenarnya roda berputar.
Dan ada beberapa hal menarik tentang cara kerja Kubernetes Ingress sebenarnya.
Berikut adalah ilustrasi yang menunjukkan hal yang sama.
Langkah-langkah di bawah ini dapat membantu Anda mengetahuinya:
- Klien pertama-tama melakukan pencarian DNS dari nama host dari server DNS dan mendapatkan alamat IP dari pengontrol masuknya.
- Kemudian klien mengirimkan permintaan HTTP ke pengontrol masuknya dengan nama host di
Host
di dalam pikiranmu. - Pengontrol menentukan layanan yang benar berdasarkan nama host, memverifikasi objek titik akhir Kubernetes untuk layanan dan meneruskan permintaan klien ke salah satu pod.
- Perhatikan bahwa pengontrol Ingress tidak meneruskan permintaan ke layanan. Itu hanya menggunakan layanan untuk memilih pod tertentu.
Kesimpulan
Sekian untuk postingan kali ini.
Tapi jangan mengira Kubernetes Ingress sudah selesai dan dibersihkan.
Ada banyak kasus penggunaan lainnya, seperti mengekspos beberapa layanan atau mengaktifkan dukungan TLS.