Kubernetes Cluster Üzerine Gitlab Kurulumu & LDAP Entegrasyonu
Merhabalar herkese! Bu yazımda Mevcut bir Kubernetes cluster’ınıza Gitlab kurulumunun HELM Chart ile nasıl yapılacağı ve HELM’in kısaca ne olduğunu ve ne amaçla kullanıldığını anlatacağım. İyi okumalar!
Helm Nedir ?
Helm Kubernetes cluster üzerinde uygulamalarımızı daha kolay yönetmemizi sağlayan bir araç olarak tanımlanabilir. Helm ile uygulamalarımızı cluster üzerine kolayca deploy edebilir. GitOps araçları ile bu deployment süreçlerini otomize edebilir ve süreçleri daha dinamik hale getirebiliriz.
Helm ile uygulamaları kolayca deploy edebileceğimizden bahsetmiştik. Peki Helm ile nele yapılıyor maddeler halinde bakalım.
- Uygulamaların Persistent Volume / Storage Class konfigürasyonu
- Uygulamaların Service Account, RBAC konfigürsayonu
- Uygulamalara ait configmap ve secret konfigürsayonu
- Uygulamaların service, ingress konfigürasyonu
- Uygulamaların kaynak kullanımlarının konfigürasyonu
- Birden fazla uygulamanın konfigürasyonunu barındırma ve cluster’a deploy etme.
Yukarıda bahsettiğim maddeler arttırılabilir fakat başlıca kullanımlar bu şekilde özetlenebilir. Haydi şimdi Helm’in kurulumuna geçelim.
Helm Kurulumu
Helm kurulumuna baktığımızda official sayfasında birden fazla kurulum yöntemi açıklanmaktadır fakat ben im tercih ettiğim yöntem binary release üzerinden kurmak olacaktır. Diğer kurulumlar ve Helm ile ilgili detaylı dokümantasyon için şu adrese bakmanızı öneririm: https://helm.sh/docs/intro/install/
- Öncelikle ilgili helm versiyonunu indirelim: https://github.com/helm/helm/releases
- Ardından tarball’ı açalım. (tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
- Helm binary dosyasını şu dizine taşıyalım. (mv linux-amd64/helm /usr/local/bin/helm)
Kurulum işte bu kadar! Şimdi sırada Helm ile GitLab kurulumu var. Hadi devam edelim!
GitLab Kurulumu
GitLab’ın Helm Chart’ını şu adresten indirelim: https://gitlab-charts.s3.amazonaws.com/gitlab-8.2.2.tgz Ardından tarball’ı extract edelim. (tar xvf gitlab-8.2.2)
Bu aşamadan sonra kurulumu yapmak için bir storage class’a ihtiyacımız olacaktır. Eğer storage class var ise clusterınızda values.yaml içerisindeki storageClass parametresini düzenleyerek kurulum konfigürasyonuna devam edebilirsiniz. Yoksa storage class kurmanız gereklidir. (Bkz Nfs Storage Class)
ilk olarak indirdiğimiz dosyayı açtığımızda şu şekilde bir dosya/dizin yapısı ile karşılaşmamız gerekecektir.
Burada values.yaml’ı bir text editör ile açıp 51. satırdaki edition: ee parametresini edition: ce olarak değiştirmemiz gereklidir. (Ee: Enterprise Edition Ce: Community Edition)
Eğer cluster’ınızda bir ingress kontrolcüsü varsa aşağida gösterilen ingress kısmındaki enabled:true parametresini false’a çekmeniz gerekir.
Eğer cert-manager kullanmadan bir SSL sertifikası yönetimi yapılacaksa (örneğin organizasyonunuza ait hazır ssl sertifikası kullanılacaksa) Cert Manager ile ilgili enabled: parametresi false’a çekilmelidir ve buna göre ingress kontrolcüsüne ilgili sertifika verilmelidir. (Bkz: Istio Ingress Gateway With SSL)
nginx-ingress: &nginx-ingress
enabled: false
tcpExternalConfig: "true"
controller: &nginx-ingress-controller
addHeaders:
Ardından Helm chartı konfigüre etmemiz gerekiyor. İlk olarak charts/postgresql altındaki values.yaml dosyasında bulunan StorageClass parametresine kurulu olan storage Class girilmelidir. Örneğin.
mountPath: /bitnami/postgresql
## @param primary.persistence.subPath The subdirectory of the volume to mount to
## Useful in dev environments and one PV for multiple services
##
subPath: ""
## @param primary.persistence.storageClass PVC Storage Class for PostgreSQL Primary data volume
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner. (gp2 on AWS, standard on
## GKE, AWS & OpenStack)
##
storageClass: "storage-class-isminiz"
Devamında charts/gitlab dizininde bulunan values.yaml açılır ve aşağıdaki gibi düzenlenir.
global:
edition: ce
hosts:
domain: gitlab.ornekingress.com
Kuruluma başlamak için aşağıdaki komut kullanılır. Bu komut ile LDAP konfigurasyonu için gerekli parametreler verilecektir.
helm template gitlab . \
--set [email protected] \
--set global.hosts.domain=gitlab.ornekingress.com \
--set global.appConfig.ldap.servers.main.label='LDAP' \
--set global.appConfig.ldap.servers.main.host='<ldap-server'ınız>' \
--set global.appConfig.ldap.servers.main.port='389' \
--set global.appConfig.ldap.server.main.uid='sAMAccountName' \
--set global.appConfig.ldap.servers.main.bind_dn='CN=Service User\, OU=Service\, DC=sirketim\,DC=com' \
--set global.appConfig.ldap.servers.main.base='OU=Users\,DC=sirketim\,DC=com' \
--set global.appConfig.ldap.servers.main.password.secret='gitlab-ldap-secret'\
--set global.appConfig.ldap.servers.main.password.key='password' | kubectl apply -f -
Bu komutta dikkat etmeniz gerekenler:
- global.hosts.domain=gitlab.ornekingress.com Burada gitlab’a ulaşacağınız domain bilgisini girmelisiniz ardından ingress kontrolcünüzü buna göre düzenlemelisiniz.
- global.appConfig.ldap.server.main.uid=’sAMAccountName’ Burada organizasyonunuza ait kullanıcıların kullanıcı adları ile girmelerini sağlamak için uid sAMAccountName belirlenmelidir.
- global.appConfig.ldap.servers.main.bind_dn=’CN=Service User\, OU=Service\, DC=sirketim\,DC=com’ \ Burada şirketinizdeki servis kullanıcısının bulunduğu yeri belirtmeniz gerekiyor bu user’a ait şifre ise kubernetes ortamında secret olarak verilmelidir.
- global.appConfig.ldap.servers.main.base=’OU=Users\,DC=sirketim\,DC=com’ Burada şirket organizasyonunuzdaki kullanıcıların bulunduğu user search dizini olan Organization Unit’i belirtmelisiniz.
- global.appConfig.ldap.servers.main.password.secret burada daha önce bahsettiğim servis kullanıcısına ait password’ün secret olarak sisteme verilmesi gerekmektedir. (Bkz: Secrets)
- global.appConfig.ldap.servers.main.password.key Burada secret içindeki hangi Key’in password olarak alınacağı belirtilir. Secret oluşturulurken key olarak password verildi ise bu key’e ait password datası sisteme verilir.
Bu aşamadan sonra Helm tüm kurulum işlemlerini yapacaktır. İlgili ingress kurallarını oluşturarak gitlab’a erişim sağlayabilirsiniz. İyi çalışmalar dilerimmmm 🙂