İçerik
Private EKS cluster kurarak Cloudflare Zero Trust ile güvenlik sağladım. Bu cluster’larımı güvence altına almanın harika bir yolu oldu. Deneyimlerimi ve karşılaştığım zorlukları paylaşmanın yararlı olacağını düşündüm.
Yapacağımız İşlemler
- Cloudflare account ve Zero Trust Team oluşturma
- Private EKS cluster oluşturma (kendi VPC’sinde, private olarak configure)
- Cloudflare Tunnel client ile public EC2 bastion kurulumu
- EKS control plane security group configure etme
- Cloudflare Zero Trust tunnel ve policy’leri configure etme
- WARP client install ve device enrollment
- Private cluster connectivity test
Cloudflare Account ve Zero Trust Team Oluşturma
Cloudflare account oluştur
https://dash.cloudflare.com/ adresine git ve ücretsiz account oluştur.
Zero Trust account kurulumu
Dashboard içinde Zero Trust account oluştur. Bu tutorial için free plan yeterli. Kurulum sırasında team oluşturman istenecek. Team adını hatırladığından emin ol – WARP Zero Trust client ile login olurken gerekecek.
Private EKS Cluster Oluşturma
Gerçekten basit bir cluster oluşturacağız. Proof of concept için kullandığım cluster configuration dosyası:
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: vpn-eks-cluster
region: us-east-1
vpc:
clusterEndpoints:
publicAccess: true # temp: on for bootstrap
privateAccess: true
nodeGroups:
- name: t2micro-nodes
instanceType: t2.micro
desiredCapacity: 1
minSize: 1
maxSize: 1
Oluşturmak için şu komutu çalıştır:
eksctl create cluster -f private-eks-cluster.yaml
Bu kendi VPC’si olan basit ve ekonomik tek-node cluster oluşturur. Default VPC kullanmamak daha iyi — yeni bir tane oluşturmak default setup’ı riske atmaktan çok daha temiz.
Şimdi cluster’ı private yapalım ki sadece yeni VPC’mizin private subnet’lerini kullansın ve VPC dışından erişilebilir olmasın.
eksctl utils update-cluster-vpc-config \
--cluster <YOUR_CLUSTER_NAME> --region <YOUR_CLUSTER_REGION>\
--private-access=true --public-access=false --approve
Cluster’ın private olduğundan emin olmak için şunu çalıştırabilirsin:
aws eks describe-cluster --region <YOUR_CLUSTER_REGION> --name <YOUR_CLUSTER_NAME>\
--query "cluster.resourcesVpcConfig.{Public:endpointPublicAccess,Private:endpointPrivateAccess}"
Public EC2 Bastion Kurulumu
AWS account’umuzda EKS cluster ile aynı VPC’de public EC2 instance oluşturabiliriz. Bunun için EC2’ye git ve Launch Instance‘a tıkla.
Amazon Linux seç:

Instance Type seç:

Private cluster’ınla aynı VPC’yi seçtiğinden emin ol:

Her şey tamam, şimdi çalıştır ve yeni instance’ına SSH ile bağlan…
Bağlandıktan sonra bir sonraki adım Cloudflare client install etmek:
# Download the Linux AMD64 binary
curl -L -o cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
# Make it executable
chmod +x cloudflared
# Move it to /usr/local/bin
sudo mv cloudflared /usr/local/bin/
# Verify
cloudflared --version
EC2 instance’ına Cloudflare client install ettikten sonra tunnel oluşturabiliriz. Ama önce Cloudflare ile authenticate olmamız gerekiyor. Account’un yoksa cloudflare.com‘a git ve oluştur.
cloudflared tunnel login
Bu komutu terminal’de çalıştırdığında URL yazdıracak. Bu URL’yi kopyala ve Cloudflare ile authenticate olmak için kullan. Authentication’dan sonra client’ın bundan sonra authentication için kullanacağı certificate download edilecek.
Authenticate olduktan sonra tunnel oluşturabiliriz:
cloudflared tunnel create eks-cluster-tunnel
Bu tunnel’ın ID’sini döndürür, tunnel oluşturulduğunu gösterir. Şimdi tunnel’ı EKS API’sini expose edecek şekilde configure etmemiz gerekiyor. Bunun için /etc/cloudflared/config.yml
altında config.yml oluşturmamız gerekiyor:
# create directory
sudo mkdir -p /etc/cloudflared
# creates config file
sudo nano /etc/cloudflared/config.yml
config.yml içine yaz:
tunnel: eks-cluster-tunnel
credentials-file: /home/ubuntu/.cloudflared/<tunnel-id>.json
ingress:
# This maps your Cloudflare hostname to your private EKS API endpoint
- hostname: eks-api.example.com
service: https://<private-EKS-API-endpoint>:443
originRequest:
# Ensures TLS works even if the endpoint uses a self-signed cert
noTLSVerify: true
# Default fallback rule
- service: http_status:404
Private-EKS-API URL’inizi almak için AWS client kullanarak cluster’ı describe edebiliriz:
aws eks describe-cluster \
--name <cluster-name> \
--region <cluster-region>\
--query "cluster.endpoint" \
--output text
Configuration’a sahip olduğumuzda tunnel’ı çalıştırabiliriz:
cloudflared tunnel run eks-cluster-tunnel
Her şey çalışırsa tunnel’ın düzgün çalıştığından emin olmak için service oluşturup başlatabiliriz:
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
Cloudflare account’umuzda her şeyi verify edebiliriz. Dashboard’a login ol, Zero Trust‘a git ve Zero Trust Dashboard’da Network tab’ını aç ve Tunnels‘a tıkla. Tunnel’ının listelendiğini ve status’unun Healthy gösterildiğini göreceksin.

EC2 bastion instance’ından her şey neredeyse hazır. Ama önce instance’ımızın EKS endpoint’e ulaşabildiğini doğrulamamız etmemiz gerekiyor. Bunun için control plane’in security group’unu edit etmemiz gerekiyor.
EKS cluster dashboard’ına git, Networking‘e tıkla ve Cluster security group‘u seç.

Inbound rules‘ı edit et ve bastion’ın security group’unun connect olmasına izin veren HTTPS (port 443) için rule ekle.

Şimdi EC2 bastion’a SSH ile bağlan ve EKS endpoint’e ulaşabildiğini doğrula:
curl -4 -vk https://my_eks_endpoint
Kubernetes API’sinden response alıp almadığını kontrol etmek için bu komutu çalıştırabilirsin, output şöyle görünmeli:

Cloudflare Configuration
Bu demo’da Cloudflare’de domain setup yapmadık çünkü domain’imiz başka yerde manage ediliyor. Domain set’imiz olmadığından https://my_eks_endpoint‘in resolve ettiği IP’ye route oluşturacağız.
IP’yi almak için şunu çalıştır:
route get <my_eks_endpoint>
Şöyle bir sonuç vermeli:
route to: 192.168.93.51
destination: 192.168.93.51
Adres 192.168.93.51‘e resolve oluyor. Tunnel’ımızın bu endpoint’e traffic route edebilmesini sağlamak için private network’ünü tunnel configuration’a dahil etmemiz gerekiyor.

Özellikle CIDR block 192.168.93.0/24
ekleyeceğiz, bu 192.168.93.1’den 192.168.93.254’e kadar tüm range’i kapsar. Bu 192.168.93.51
dahil o subnet’teki tüm muhtemel host’ların tunnel üzerinden erişilebilir olmasını garanti eder.

Şimdi tunnel’ımız https://my_eks_endpoint‘den resolve address’i route edecek.
WARP Installation ve Configuration
Neredeyse bitti! Cloudflare’de son adım device’ınızı private network’e bağlamak. Bunun için Zero Trust → Networks → Overview‘a git, sonra Connect a device to a private network altında Add a device‘a tıkla.

- Makinene WARP install et
- Enrollment policy tanımla, enroll etmek istediğin email’leri ekle

3. Service mode seç, Both Traffic and DNS (önerilen) seçiyoruz
4. Default routing’i Include mode‘a set ediyoruz, böylece sadece spesifik address range’ler WARP üzerinden route edilir. 192.168.93.0/24
‘ü bu listeye ekleyeceğiz.
5. Split tunnel’lar için configuration’ın şöyle göründüğünden emin oluyoruz:

Complete edip continue ediyoruz.
Şimdi makinene git ve WARP’ı aç. Şimdi yapmak istediğimiz ZeroTrust’ta authenticate olmak. Mac’te WARP icon’u ekranın üstündeki menu bar‘da görünecek.

Icon’a tıkla ve WARP window’u görünecek:

Setting icon’una tıkla ve Preferences’a tıklayıp account tab’ına git.

Login to Cloudflare Zero Trust’a tıkla, Zero Trust team’ini gir ve talimatları takip et. Zero Trust’a başarıyla login olduktan sonra WARP client’ı tekrar aç ve Connect‘e tıkla.

Artık bağlandın ve private EKS cluster‘a yapılan tüm istekler güvenli şekilde Cloudflare üzerinden private EKS control plane’ine route edilecek.
Sonuç
Cloudflare Zero Trust WARP ile private EKS cluster güvenliği sağlamak modern DevSecOps süreçlerinde kritik öneme sahip. Bu setup sayesinde VPN karmaşası olmadan güvenli erişim sağlayabilir, Zero Trust Network Access (ZTNA) prensiplerini uygulayabilirsiniz.
Cloudflare tunnel kullanarak private Kubernetes control plane’e güvenli erişim sağlarken, WARP client ile user device’larından kesintisiz bağlantı elde ediyorsunuz. Bu architecture pattern özellikle remote work environment’larda ve multi-cloud deployment’larda büyük avantaj sağlıyor.
Network security’yi geleneksel firewall rule’larından Zero Trust model’e geçirmek için bu kapsamlı uygulama bir başlangıç noktası sunuyor. Production environment’larda bu pattern’i scale ederken ek güvenlik layer’ları ve monitoring solution’larını da entegre etmeyi unutmayın.
Daha fazla bilgi için Cloudflare Zero Trust dokümantasyonunu ve AWS EKS dokümantasyonunu inceleyebilirsiniz.
İlginiz çekerse SRE/DevOps Engineer’lar Neden Claude Code Kullanmalı? yazıma da göz gezdirebilirsiniz.