L13 — K8s temel: Deployment/Service/Ingress + RBAC + NetworkPolicy#
Uygulamayı yerel bir kind cluster'ında Deployment olarak çalıştırır, Service + Ingress ile dışarıdan erişir. Ama K8s'i güvenlik iplikten ayrı öğrenmek bu repoda yasak: aynı gün en az yetkili bir RBAC Role/RoleBinding ve bir NetworkPolicy yazar, yetkisiz erişimin reddedildiğini gösterirsin. Güvenlik sonradan eklenen bir bölüm değil — D1'in içinde.
Gerekenler#
docker,kind,kubectl.- kind cluster (ingress ile):
- İmaj:
nginxinc/nginx-unprivileged:1.27-alpine(non-root, 8080 dinler).
Görev#
- Namespace + Deployment.
starter/deployment.yamlhazır (non-root, resources,serviceAccountName). Uygula ve Pod'unRunningolduğunu gör. - Service + Ingress (SEN yaz).
starter/service.yamlvestarter/ingress.yamliskeletlerini doldur: Service ClusterIP 80 → hedef 8080, Ingress hostlab.example. Erişimi doğrula: - RBAC — en az yetki (SEN yaz).
starter/rbac.yaml: yalnızget/list/watch podsyetkisi olan bir Role + onu Deployment'ın ServiceAccount'una bağlayan RoleBinding. Yetkisiz işlemin reddedildiğini kanıtla: - NetworkPolicy — varsayılan reddet (SEN yaz).
starter/networkpolicy.yaml: önce namespace'e default-deny ingress, sonra yalnız ingress-controller'dan gelen trafiğe izin. İzinsiz bir Pod'dan erişimin kesildiğini göster: - Raporla.
report.txt'e:kubectl getçıktısı,auth can-isonuçları ve NetworkPolicy'nin izinsiz erişimi nasıl kestiğini yaz.
Kabul kriterleri#
-
bash verify.shsıfır hatayla geçiyor. - Manifestler Deployment + Service + Ingress + Role/RoleBinding + NetworkPolicy içeriyor.
-
report.txtauth can-i delete pods … → nosonucunu (yetkisiz erişim reddi) içeriyor. -
report.txtNetworkPolicy'nin izinsiz Pod erişimini kestiğini gösteriyor. - Bir Pod'un neden
Pending/CrashLoopBackOffolduğunu üç komutla daraltabildiğinireport.txt'te bir örnekle anlatıyorsun.
İpucu (çözüm değil)#
- Service selector'ı Deployment
labels'ıyla birebir eşleşmeli — eşleşmezse Service boşEndpointsgösterir, "çalışıyor ama erişilemiyor" (K04'ün senaryosu). - RBAC "en az yetki": Role sadece işe yarayanı verir.
resources: ["pods"],verbs: ["get","list","watch"]—deleteyok. - NetworkPolicy toplamsaldır: default-deny koyduktan sonra izin kuralı eklemezsen hiçbir şey bağlanamaz. Önce reddet, sonra tek tek aç.
Takılırsan solution/'a bak — ama önce kendin dene.