Test veya geliştirme ortamının, uygulamamızı harici isteklere maruz bırakmak için Service bileşenini kullanması uygundur. Ancak aynı mantık için Ingress'e ihtiyacımız var. Ingress, K8S kümesindeki harici isteklerin gerçek giriş noktasıdır. Ingress denetleyicisi eklentileri kümeye manuel olarak yüklenir. Burada Nginx Ingress'i kullanacağız. Kurulumunuzda harici bir yük dengeleyici/proxy sunucusu varsa, Ingress denetleyicisinin önünde oturur, ancak bu seferliğine onu yok sayacağız. Bu, K8S bileşenlerinin tamamen dışarıya maruz kalmasını önlemek içindir. Bu örnekte Minikube kullanıyoruz.


Kurulum


$ minikube addons enable ingress
Verifying ingress addon...
The 'ingress' addon is enabled

$ kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-f9fd979d6-jwz84 1/1 Running 7 19d
etcd-minikube 1/1 Running 7 19d
ingress-nginx-admission-create-tpbrr 0/1 Completed 0 10m
ingress-nginx-admission-patch-vbwvm 0/1 Completed 2 10m
ingress-nginx-controller-799c9469f7-tkz48 1/1 Running 0 10m
kube-apiserver-minikube 1/1 Running 9 19d
kube-controller-manager-minikube 1/1 Running 7 19d
kube-proxy-fjxvf 1/1 Running 7 19d
kube-scheduler-minikube 1/1 Running 7 19d
storage-provisioner 1/1 Running 30 19d

Detaylar için kubectl describe pod -n kube-system ingress-nginx-controller-799c9469f7-tkz48 komutunu çalıştırın. Nginx kontrolörü ek ayarları için buraya bakın.


Yapılandırma


apiVersion: networking.k8s.io/v1beta1
kind: Ingress

metadata:
name: address-finder-ingress

spec:
tls:
- hosts:
- my-address-finder.com
secretName: address-finder-tls-secret
rules:
- host: my-address-finder.com
http:
paths:
- path: /
backend:
serviceName: address-finder-service # You can add this, I am skipping.
servicePort: 80

Burada Kubernetes kümesinde bulunan address-finder-service ismindeki servisi harici isteklere açıyoruz. Eğer bunun haricinde daha başka servisler, domainler veya adresler kullanmak isterseniz, path ayarlarını kullanabilirsiniz.


SSL


Dışarıdan sadece HTTPS erişimi istiyoruz. HTTPS talebi gelir gelmez, Nginx SSL sonlandırma, Ingress kontrolörü seviyesinde gerçekleşir. Ingress kurulumumuz, mevcut olan TLS sertifikasını kullanarak trafiği sonlandırma ve şifrelenmemiş HTTP trafiğini dahili hizmetlere (düz metin olarak) iletme talimatı verecektir. Daha fazla bilgi için burayı okuyun.



Sertifikalar


$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout ~/Desktop/k8s.key -out ~/Desktop/k8s.crt \
-subj "/CN=my-address-finder.com/O=my-address-finder.com"

$ kubectl create secret tls address-finder-tls-secret \
--cert=~/Desktop/k8s.crt \
--key=~/Desktop/k8s.key

$ kubectl describe secret address-finder-tls-secret
Name: address-finder-tls-secret
Namespace: default
Labels:
Annotations:

Type: kubernetes.io/tls

Data
====
tls.crt: 1233 bytes
tls.key: 1708 bytes

Hosts


Ingress'in iletimini yaptıktan sonra, host bilgilerini aşağıdaki gibi yenilemeniz gerekecek. IP adresini address-finder-ingress komut çıktısından alabilirsiniz.


$ nano /etc/hosts
192.168.99.100 my-address-finder.com

Tarayıcınızdan https://my-address-finder.com adresine ulaşabilirsiniz. HTTP çalışmayacak.