giriiş
Statik rota operatörünün temel amacı, Kubernetes ortamınızdaki ağ trafiği üzerinde daha fazla esneklik ve kontrol sağlamaktır. Uygulama gereksinimlerini karşılamak ve ağ performansını optimize etmek için yönlendirme yapılandırmasını hassas bir şekilde ayarlamanıza olanak tanır. Bir DaemonSet olarak dağıtılır ve bu nedenle, DigitalOcean tarafından yönetilen Kubernetes kümenizin her düğümünde çalışır.
Bu eğitimde, her çalışan düğümün yönlendirme tablosunu CRD spesifikasyonuna göre yönetmeyi ve bir yük devretme ağ geçidi kurmayı öğreneceksiniz.
Bu eğitimin temel amacı, her bir çalışan düğümünün yönlendirme tablosunun CRD spesifikasyonuna göre nasıl yönetileceğini ve bir yük devretme ağ geçidinin nasıl kurulacağını göstermektir.
Ön koşullar
- Erişiminiz olan DigitalOcean tarafından yönetilen bir Kubernetes kümesi.
- Yerel makinenize yüklenen Kubectl CLI (DigitalOcean tarafından yönetilen Kubernetes kümenizi işaret edecek şekilde yapılandırılmış)
- NAT GW Droplet'ler (2 veya üzeri) burada ayrıntılı olarak açıklandığı gibi yapılandırılır ve uygulanır.
- Kullanıcının ihtiyaçlarına göre uyarlanmış, net ve doğru tespit sağlayan ve minimum yanlış alarm sağlayan bir Gateway Droplet arıza tespit sistemi oluşturun. Prometheus veya Nagios gibi izleme hizmetlerini kullanın, Droplet'te sağlık kontrolü uç noktaları kurun veya bildirimler için Alertmanager gibi uyarı araçları kullanın. Bu amaçla, pazaryerimizdeki bir izleme yığınını kullanabilirsiniz.
Aşağıda mimari diyagramı gösterilmektedir:
Kubernetes statik rota operatörünü dağıtma
Statik rotalar operatörünün en son sürümünü kubectl kullanarak DigitalOcean tarafından yönetilen Kubernetes kümenize dağıtın:
kubectl apply -f https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml
Operatör Pod'larının çalışır durumda olduğunu kontrol edin:
Operatör podlarının çalışır durumda olup olmadığını kontrol edelim.
“" bash kubectl get staticroutes -o wide -n staticroutes
The output looks similar to the below:
```bash
[secondary_label Output]
NAME AGE DESTINATIONS GATEWAY
static-route-ifconfig.me 119s ["XX.XX.XX.XX"] XX.XX.XX.XX
static-route-ipinfo.io 111s ["XX.XX.XX.XX"] XX.XX.XX.XXŞimdi operatör raporlarını kontrol edelim ve herhangi bir istisnanın raporlanmaması gerekiyor:
kubectl logs -f ds/k8s-staticroute-operator -n static-routes
Aşağıdaki çıktıyı gözlemlemelisiniz:
Output
Found 2 pods, using pod/k8s-staticroute-operator-498vv
[2023-05-15 14:12:32,282] kopf._core.reactor.r [DEBUG ] Starting Kopf 1.35.6.
[2023-05-15 14:12:32,282] kopf._core.engines.a [INFO ] Initial authentication has been initiated.
[2023-05-15 14:12:32,283] kopf.activities.auth [DEBUG ] Activity 'login_via_pykube' is invoked.
[2023-05-15 14:12:32,285] kopf.activities.auth [DEBUG ] Pykube is configured in cluster with service account.
[2023-05-15 14:12:32,286] kopf.activities.auth [INFO ] Activity 'login_via_pykube' succeeded.
[2023-05-15 14:12:32,286] kopf.activities.auth [DEBUG ] Activity 'login_via_client' is invoked.
[2023-05-15 14:12:32,287] kopf.activities.auth [DEBUG ] Client is configured in cluster with service account.
[2023-05-15 14:12:32,288] kopf.activities.auth [INFO ] Activity 'login_via_client' succeeded.
[2023-05-15 14:12:32,288] kopf._core.engines.a [INFO ] Initial authentication has finished.
[2023-05-15 14:12:32,328] kopf._cogs.clients.w [DEBUG ] Starting the watch-stream for customresourcedefinitions.v1.apiextensions.k8s.io cluster-wide.
[2023-05-15 14:12:32,330] kopf._cogs.clients.w [DEBUG ] Starting the watch-stream for staticroutes.v1.networking.digitalocean.com cluster-wide.Bir ağ geçidi arızasının etkisini azaltmak için, gerektiğinde devreye almaya hazır bir yedek ağ geçidi bulundurmanız önerilir. Gerçek yüksek kullanılabilirlik (HA) şu anda operatör tarafından desteklenmese de, devreye alma işlemi gerçekleştirmek hizmet kesintisinin süresini en aza indirmeye yardımcı olur.
Diyelim ki, etkin veya birincil ağ geçidini temsil eden 34.160.111.145 numaralı belirlenmiş bir hedef IP adresiniz var ve trafiği iletmekten sorumlu olan IP adresi 10.116.0.4. Bu, primar.yaml dosyasında saklanır.
apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: primary
spec:
destinations:
- "34.160.111.145"
gateway: "10.116.0.4"Ayrıca, aynı hedef IP adresinden gelen trafiği işlemeye hazır, 10.116.0.12 IP adresine sahip yedek veya ikincil bir ağ geçidiniz olacak. secondary.yaml dosyasındaki StaticRoute tanımı, ağ geçidi IP adresi (ve nesne adı) dışında birincil tanımla aynıdır. Bu tanım, secondary.yaml dosyasında saklanır.
apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: secondary
spec:
destinations:
- "34.160.111.145"
gateway: "10.116.0.12"Gerçek başarısızlık süreci ise şu adımları içerir:
- 10.116.0.5 IP adresine sahip aktif ağ geçidinin kapalı olduğunu tespit edin.
- Şu anda etkin olan StaticRoute'u silin.
- Hazır StaticRoute’u uygulayın.
Etkin StaticRoute'u Sil
Şimdi aktif olan StaticRoute'u silelim.
kubectl delete -f primary.yaml
Her operatör örneğine nesne silme işlemini gerçekleştirmesi için yeterli zaman tanımak amacıyla 30-60 saniye bekleyin. Yani, yolu tüm düğümlerden silerek yanıt verin.
Bekleme StatikRotasını Uygula
İkincil StaticRoute'u etkinleştirelim.
kubectl apply -f secondary.yaml
Operatör, yeni yedek StaticRoute'u seçmeli ve ilgili yönlendirme tablosu girişlerini girmelidir. Bundan sonra, devralma işlemi tamamlanır.
Kurulum testi
Her CRD örneği, genel IP adresinizi bildiren iki web sitesine statik bir rota oluşturur: ifconfig.me/ip ve ipinfo.io/ip. Tipik bir statik rota tanımı şöyle görünür:
apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: static-route-ifconfig.me
spec:
destinations:
- "34.160.111.145"
gateway: "10.116.0.5"Ayarları test etmek için örnek konumdan örnek bir bildirim indirin:
ifconfig.me ve ipinfo.io için örnek
curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ifconfig.me.yaml
curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ipinfo.io.yaml
Manifest'leri indirdikten sonra, her manifest dosyasını <> ile değiştirin. Ardından, her manifest'i kubectl kullanarak uygulayın:
kubectl apply -f static-route-ifconfig.me.yaml
kubectl apply -f static-route-ipinfo.io.yaml
Son olarak, curl-test pod'unun her rota için NAT Ağ Geçidinizin genel IP'sine yanıt verip vermediğini kontrol edin:
kubectl exec -it curl-test -- curl ifconfig.me/ip
kubectl exec -it curl-test -- curl ipinfo.io/ipAynı testi, yedek sunucuya geçiş testi sırasında da kullanmalısınız. Birincil ağ geçidi damlacık yedek sunucusuna geçiş sırasında, sonuç NAT GW'ye birincil damlacığın genel IP adresini, ikincil damlacık/yedek sunucuya geçiş sırasında ise sonuç ikincil damlacık NAT Ağ Geçidi'nin genel IP adresini vermelidir.
Sorun giderme
StaticRoute nesnesini kontrol etmelisiniz: Bir hata oluşursa, öncelikle kuralın uygulandığı her düğüm için statik rota olayında hatayı arayın.
kubectl get StaticRoute <static-route-name> -o yaml
Günlükleri kontrol edin: Daha derinlemesine incelemek için, hatalar açısından statik rota operatörü günlüklerini kontrol edebilirsiniz.
kubectl logs -f ds/k8s-staticroute-operator -n static-routes
Sil
Operatörü ve ilişkili kaynakları kaldırmak için lütfen aşağıdaki kubectl komutunu çalıştırın (kurulum sırasında kullandığınız sürümle aynı sürüm olduğundan emin olun):
kubectl delete -f deploy https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml
Çıktı şuna benzer:
customresourcedefinition.apiextensions.k8s.io "staticroutes.networking.digitalocean.com" deleted
serviceaccount "k8s-staticroute-operator" deleted
clusterrole.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
clusterrolebinding.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
daemonset.apps "k8s-staticroute-operator" deletedŞimdi aynı curl komutunu test ederseniz, çıktı olarak işçi düğümünün IP'sini alacaksınız:
kubectl exec -it curl-test -- curl ifconfig.me/ip
kubectl exec -it curl-test -- curl ipinfo.io/ip
Şimdi işçi düğümünün genel IP'sini kontrol edin:
kubectl get nodes -o wide
Sonuç
Gerçek yüksek erişilebilirlik (HA) tam olarak desteklenmese bile, devreye alma yeteneklerinin uygulanması, ağ geçidi arızalarının etkisini en aza indirmek için önerilen bir yaklaşımdır.
Kuruluşlar, ihtiyaç halinde devreye girebilecekleri bir bekleme ağ geçidine sahip olarak hizmet kesintilerinin süresini önemli ölçüde azaltabilirler.
Bir arıza durumunda yedek bir ağ geçidine sahip olmak ve sorunsuz geçiş sağlamak önemlidir. Uygulama, belirli ihtiyaçlara göre değişiklik gösterebilse de, arızaya hazırlıklı olmayı önceliklendirmek, güvenilir ve kesintisiz hizmet sunumunun sürdürülmesine yardımcı olabilir.










