27/11/2020 - KUBERNETES
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.
$ 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.
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.
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.
--enable-ssl-passthrough
ekiyle başlatılması gerekir. nginx.ingress.kubernetes.io/ssl-passthrough
ek açıklaması, kontrolöre NGINX'in iletişimin şifresini çözmesine izin vermek yerine TLS bağlantılarını doğrudan arka uca göndermesi talimatını verir.$ 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
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.