Kubernetes Ingress melalui mata seorang pemula

Apa itu ingress?


Ingress adalah jenis sumber daya dasar di Coubertene. Jika Anda hanya mendeklarasikan objek tipe Ingress di kubernetis maka tidak ada yang terjadi.


Agar sumber ini mulai bekerja di kluster Kubernetis, Pengontrol Ingress harus diinstal, yang akan mengonfigurasi proxy terbalik sesuai dengan objek Ingress.


Ingress Controller terdiri dari 2 komponen - proxy terbalik dan controller yang berkomunikasi dengan server API Kubernetes. Proxy terbalik mendengarkan lalu lintas masuk pada port yang ditentukan dalam pengaturan (biasanya hanya port 80 yang ditentukan dalam pengaturan default). Pengontrol dapat berupa daemon terpisah (seperti pada nginx) atau bawaan pada proxy (seperti pada traefik).


Tidak semua penyedia cloud kubernetes menginstal ulang Ingress Controller secara default.


Pengontrol dapat berjalan baik sebagai DaemonSet atau sebagai Deployment. Ini sangat ideal untuk menggunakan DaemonSet sebagai satu-satunya Pengendali Ingress, sehingga proksi terbalik mendengarkan semua alamat IP pekerja. Penyebaran sempurna jika ada penyeimbang di depan pengontrol Ingress - dari penyedia kubernetis (GKE, AKS), MetalLB jika itu adalah haproxy / nginx reguler atau premium yang diinstal di server (konfigurasi manual diperlukan). Dengan instalasi ini, dimungkinkan untuk menginstal beberapa Ingress Controller.


Cara lalu lintas masuk ke Pengontrol Ingress


Dalam semua kasus, proksi terbalik di Ingress Controller mendengarkan port tempat ia menunggu koneksi http / https.


Lalu lintas di port-port ini dapat diakses dengan tiga cara:


  • NodePort (pada port acak di kisaran 30000-32767)
  • HostPort (dapat digantung di port 80, 443)
  • Jaringan host - Pod akan mengatur port-portnya pada antarmuka jaringan publik (mis. Semua port container akan terbuka)

NodePort


Menginstal Pengontrol Ingress pada NodePort tanpa LoadBalancer tidak masuk akal, karena URL akan menyertakan port yang ditentukan dalam NodePort http://domain.example.org:32200/ .


Untuk opsi ini, lebih baik menggunakan Penyebaran. Ini akan memudahkan untuk skala jumlah pod yang bertanggung jawab untuk lalu lintas masuk, mendaftar nodeAffinity untuk mereka, dan menjalankan beberapa pengendali masuknya (misalnya, untuk produksi dan pementasan).


Hostport


Saat menggunakan HostPort, port diteruskan dari host di mana ia berjalan di bawah Pod yang sama ini. LoadBalancer tidak diperlukan untuk masuk, tetapi agar situs dapat berfungsi dalam DNS, Anda harus menunjukkan bahwa alamat domain ada di semua node.


Contoh konfigurasi DNS untuk 3 pekerja:


ingress.example.org A 10.0.0.1 ingress.example.org A 10.0.0.2 ingress.example.org A 10.0.0.3 www.example.org CNAME ingress.example.org 

Untuk instalasi ini, yang terbaik adalah menggunakan DaemonSet sejak itu ini memungkinkan Anda untuk menjalankan tidak lebih dari satu Pod pada host. Penempatan adalah mungkin, tetapi sejak itu tidak masuk akal Afinitas harus didaftarkan sehingga 2 Pod tidak ditugaskan ke satu host, jika tidak akan ada konflik pada port.


Contoh Konfigurasi untuk traefik
 kind: DaemonSet apiVersion: extensions/v1beta1 metadata: name: traefik-ingress-controller namespace: traefik labels: k8s-app: traefik-ingress-lb spec: template: metadata: labels: k8s-app: traefik-ingress-lb name: traefik-ingress-lb namespace: traefik spec: serviceAccountName: traefik-ingress-controller terminationGracePeriodSeconds: 60 containers: - image: traefik:1.7.6 name: traefik-ingress-lb ports: - name: http containerPort: 80 hostPort: 80 - name: https containerPort: 443 hostPort: 443 - name: admin containerPort: 8080 hostPort: 8080 securityContext: capabilities: drop: - ALL add: - NET_BIND_SERVICE args: - --api - --kubernetes - --logLevel=DEBUG - --entrypoints=Name:https Address::443 TLS - --entrypoints=Name:http Address::80 - --defaultentrypoints=http 

Jaringan host


Saat menjalankan Ingress Controller pada jaringan bersama dengan host, tidak diperlukan penerusan port, tetapi dalam hal ini semua port yang terbuka di Pod akan dapat diakses dari Internet. Lebih baik menggunakan DaemonSet untuk menjalankan. Alasannya sama dengan HostPort - untuk menghindari konflik port.


Apa yang harus dipilih


Jika ada LoadBalancer di input - NodePort, jika tidak - HostPort + DNS Round Robin. Untuk percobaan, Anda dapat mencoba jaringan Host, tetapi tidak aman.

Source: https://habr.com/ru/post/id434524/


All Articles