GitLab 連接已有 Kubernetes 集群


在 gitlab 的 Amin Area 頁面,打開側邊欄的 Kubernetes ,點擊 Integrate with a cluster certificates,選擇 Connect existing cluster,輸入以下信息

  • Kubernetes cluster name:輸入集群名稱 cnblogs-production
  • API URL:通過 kubectl cluster-info 命令查看 api 地址,我們這里是 https://k8s-api:6443
  • CA Certificate: 通過下面的命令獲取證書
kubectl get secret \
    $(kubectl get secrets | grep default-token | awk '{print $1}') \
    -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
  • Service Token:通過以下步驟拿到 service token
    • 創建名為 gitlab 的 service account:kubectl create serviceaccount gitlab -n kube-system
    • 將 gitlab service account 加入到 cluster-admin 角色: kubectl create clusterrolebinding gitlab-cluster-admin --clusterrole=cluster-admin --serviceaccount=default:gitlab -n kube-system(注:這個命令中 serviceaccount 參數寫錯了,不是default:gitlab,應該是kube-system:gitlab
    • 拿 service token:kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab | awk '{print $1}')

然后點擊 "Add Kubernetes cluster" 按鈕進行提交,提交時報錯:

is blocked: Requests to the local network are not allowed

報錯解決方法:在 Admin Area -> Settings -> Network 中選中 "Allow requests to the local network from web hooks and services" 並保存。

再次提交成功。

在 gitlab 服務器的 hosts 文件中添加 api url 用到的主機名 k8s-api 的解析(我們搭建的是高可用集群,所以這里用的是自定義主機名)。

配置完成,gitlab 卻連不上 k8s 集群。

登錄到 gitlab 服務器,將之前拿到的證書保存到 ca.crt 文件,用下面的 curl 命令請求 api

curl --cacert ca.crt -H "Authorization: Bearer <service token>" https://k8s-api:6443/api/v1/namespaces/production/pods

返回的是 403 錯誤

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
    
  },
  "status": "Failure",
  "message": "pods is forbidden: User \"system:serviceaccount:kube-system:gitlab\" cannot list resource \"pods\" in API group \"\" in the namespace \"production\"",
  "reason": "Forbidden",
  "details": {
    "kind": "pods"
  },
  "code": 403
}

通過上面的錯誤信息找到了線索,請求 api 時使用的 service account 是 kube-system:gitlab ,但我們創建 ClusterRoleBinding 時用的是 --serviceaccount=default:gitlab,命名空間弄錯了,通過下面的命令編輯 ClusterRoleBinding 配置文件,更正命名空間后問題就解決了。

kubectl edit clusterrolebinding gitlab-cluster-admin -n kube-system

gitlab 連接 k8s 集群成功!

參考資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM