Kubernetes cluster yönetirken en önemli konulardan birisi belirli service accountları için kubeconfig dosyası oluşturmaktır. Service accountları için oluşturulan kubeconfig dosyaları CICD araçları yada farklı tool’ların cluster’a erişimleri için kullanılır. Kubernetes RBAC ile bu kubeconfig dosyalarının belirli service accountlar için belirli yetkilerde olmasını sağlayabilirsiniz.
Şimdi oluşturacağımız bir service account için kubeconfig dosyası nasıl oluşturulur ve nasıl yetki ataması yapılır birlikte gözlemleyelim.
Öncelikle aşağıdaki definition file ile bir service account oluşturalım.
apiVersion: v1
kind: ServiceAccount
metadata:
name: cicd-admin-account
namespace: kube-system
# Create service account
kubectl apply -f service-account.yaml
Bu işlemin ardından service account belirtilen namespace içerisinde oluşturulacaktır.
İkinci olarak oluşturulan bu service account’a cluster seviyesinde admin rolu atamak için aşağıdaki rolebinding definition file’ını apply edelim. Burada bu kubeconfig cicd tool tarafından kullanılacağı için bütün namespace’lerde yetkili olmasını istiyorum. Bu sebeple kolaylık olsun diye cluster seviyesinde admin rolü atadım. Siz daha restricted rol ataması yaparak güvenlik önlemlerinizi arttırabilirsiniz. Test ortamı için güvenlik kısmını ikinci plana bıraktım diyebiliriz 🙂
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: marsneo-admin-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: cicd-admin-account
namespace: kube-system
# Create cluster role binding for service account
kubectl apply -f clusterrolebinding.yaml
3. adımda ise oluşturulan service account’a ait bir token üretmemiz gerekiyor. Bu token’ı üretip bir secret üzerinde based64 encoded olarak tutmalıyız. Bu sebeple aşağıdaki secret definition dosyasını kullanarak gerekli secret objesini oluşturmalıyız.
apiVersion: v1
kind: Secret
metadata:
annotations:
kubernetes.io/service-account.name: cicd-admin-account
name: cicd-admin-account
namespace: kube-system
type: kubernetes.io/service-account-token
Bu işlemin ardından gerekli token service account için oluşturulacak ve secret üzerinde encrypted olarak tutulacaktır. Oluşturulan token’ı get etmek için aşağıdaki komutu çalıştırmanı yeterlidir.
# retrieve token from secret
kubectl get secret cicd-admin-account -n kube-system -o jsonpath='{.data.token}' | base64 -d
oluşturulan token’ı kullanıp kubeconfig dosyasını update ettikten sonra cluster’ınıza kolaylıkla bağlanabilirsiniz.
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <ca data>
server: <server url>
name: k8s-server
contexts:
- context:
cluster: k8s-server
user: cicd-user
name: k8s-server-context
current-context: k8s-server-context
kind: Config
preferences: {}
users:
- name: cicd-user
user:
token: <service account token>
Gerekli update işlemleri yapıldıktan sonra kubeconfig dosyasını ilgili cicd tool’una entegre ederek pipeline’ların cluster’a erişimlerini organize edebilirsiniz.
Görüşmek üzere 😉
Fırat