• 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 集群成功!

    参考资料:

  • 相关阅读:
    简要描述客户端发送的http request header都包含哪些内容
    如何利用TestNG监听器优化测试报告
    TestNG 监听器 ITestListener
    p3317 [SDOI2014]重建
    EZOJ #387字符串
    EZOJ #386 最小生成树
    EZOJ #385 排列
    EZOJ #375高速公路
    EZOJ #374学习
    EZOJ #373排序
  • 原文地址:https://www.cnblogs.com/dudu/p/14355048.html
Copyright © 2020-2023  润新知