基于kops的AWS Kubernetes集群GitLab CI API认证配置问题
配置GitLab CI访问Kops搭建的AWS Kubernetes集群
看起来你已经搞定了K8s集群部署和应用上线,接下来要把GitLab CI和这个集群打通对吧?我来一步步给你捋清楚需要的配置步骤:
1. 确认Kubernetes API端点
你已经拿到了API地址:https://api.useast1.dev.example.com/,这个就是GitLab CI需要的Kubernetes API端点,直接记下来后面用就行。
2. 创建用于GitLab CI的Kubernetes服务账户及令牌
GitLab CI需要一个有足够权限的服务账户来访问集群,我们专门创建一个适配的账户:
步骤1:创建服务账户与权限绑定
先写一个YAML配置文件(比如命名为gitlab-ci-service-account.yaml),内容如下:
apiVersion: v1 kind: ServiceAccount metadata: name: gitlab-ci-service namespace: default --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: gitlab-ci-service-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: edit # 这里用内置的edit权限,如果你需要更严格的权限,可以自定义ClusterRole subjects: - kind: ServiceAccount name: gitlab-ci-service namespace: default
然后执行命令应用这个配置:
kubectl apply -f gitlab-ci-service-account.yaml
步骤2:提取服务账户的认证令牌
接下来要拿到这个服务账户的令牌,用于GitLab的身份认证:
# 先获取服务账户关联的secret名称 SECRET_NAME=$(kubectl get serviceaccount gitlab-ci-service -o jsonpath='{.secrets[0].name}') # 解码并提取令牌 kubectl get secret $SECRET_NAME -o jsonpath='{.data.token}' | base64 --decode
运行完上面的命令后,得到的一串长字符串就是服务令牌,复制好妥善保存。
3. 在GitLab中配置CI/CD变量
登录你的GitLab项目,进入设置 > CI/CD > 变量页面,添加以下两个关键变量:
KUBE_API_URL:值填写你的API端点https://api.useast1.dev.example.com/KUBE_TOKEN:值填写刚才获取的服务令牌,记得勾选"保护变量"和"掩码变量",避免令牌泄露
4. 编写.gitlab-ci.yml示例验证连接
最后在项目根目录创建.gitlab-ci.yml,用这个示例来验证集群连接是否正常:
stages: - test test_k8s_connection: stage: test image: bitnami/kubectl:latest script: - kubectl config set-cluster kops-cluster --server="$KUBE_API_URL" --insecure-skip-tls-verify=true # 如果你的API证书是自签名的需要加这个参数;可信证书可以去掉 - kubectl config set-credentials gitlab-ci --token="$KUBE_TOKEN" - kubectl config set-context kops-cluster --cluster=kops-cluster --user=gitlab-ci - kubectl config use-context kops-cluster - kubectl get pods # 执行这个命令验证是否能正常访问集群资源
补充说明:如果你的K8s API使用的是可信CA证书,可以去掉
--insecure-skip-tls-verify=true,额外添加一个KUBE_CA_PEM变量存储CA证书内容,然后在kubectl配置里加上--certificate-authority=<(echo "$KUBE_CA_PEM")。
这样配置完成后,GitLab CI就能正常访问你的Kops集群了,你可以根据实际需求扩展CI流程,比如自动化部署应用、执行集群资源检查等。
内容的提问来源于stack exchange,提问作者dwjohnston
相关产品推荐
相关产品推荐

