git - 如何为所有 GitLab 存储库配置暂存命名空间以供使用?
问题描述
在组级别上,我在 GitLab 中配置了一个 Kubernetes 集群,我希望能够配置一个专用的命名空间staging
以用于我的所有存储库,以便轻松地在微服务之间进行通信。
在我的.gitlab-ci.yml
文件中:
staging:
stage: staging
variables:
APP_NAME: staging-website-frontend
APP_LABEL: staging
DEPLOY_HOST: lanorr.eu
environment:
name: staging
url: http://lanorr.eu/
image: roffe/kubectl:v1.13.0
script:
- kubectl delete --ignore-not-found=true secret gitlab-auth
- kubectl create secret docker-registry gitlab-auth --docker-server=$CI_REGISTRY --docker-username=$KUBE_PULL_USER --docker-password=$KUBE_PULL_PASS
- cat k8s/deployment.yml | envsubst | kubectl apply -f -
only:
- master
我试图添加- export KUBE_NAMESPACE=staging
到脚本部分,但没有按预期工作。
和我的k8s/deployment.yml
文件:
kind: Service
apiVersion: v1
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "5000"
name: ${APP_NAME}
spec:
selector:
app: ${APP_LABEL}
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 5000
---
kind: Deployment
apiVersion: apps/v1beta1
metadata:
name: ${APP_NAME}
labels:
app: ${APP_LABEL}
spec:
replicas: 3
selector:
matchLabels:
app: ${APP_LABEL}
template:
metadata:
labels:
app: ${APP_LABEL}
spec:
imagePullSecrets:
- name: gitlab-auth
containers:
- name: ${APP_NAME}
image: "${DOCKER_IMAGE_TAG}"
ports:
- containerPort: 5000
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ${APP_NAME}-ingress
spec:
rules:
- host: ${DEPLOY_HOST}
http:
paths:
- backend:
serviceName: ${APP_NAME}
servicePort: 80
在这里,我还尝试namespace
通过 ENV_VARIABLE 手动添加,但没有运气。我不断收到相同的错误,即 GitLab 存储库的 ServiceAccount 无权在此命名空间中查找服务和部署。
错误:
Error from server (Forbidden): error when retrieving current configuration of:
Resource: "/v1, Resource=services", GroupVersionKind: "/v1, Kind=Service"
...
from server for: "STDIN": ingresses.extensions "review-ci-testing-updqhr-la-danesa-web-ingress" is forbidden: User "system:serviceaccount:la-danesa-website-5:la-danesa-website-5-service-account" cannot get resource "ingresses" in API group "extensions" in the namespace "review-ci-testing"
它是一个自托管的 gitlab 服务器和一个自托管和自管理的 kubernetes 集群。一切正常,除非我尝试使用自定义命名空间进行暂存部署。
你们有没有建议如何解决这个问题?
2019 年 9 月 9 日更新
我刚刚更新到 12.2,我注意到我可以添加 ENVIRONMENT SCOPED 变量,尽管添加KUBE_NAMESPACE = 'staging'
环境staging
似乎不起作用。现在 GitLab 具有自动创建特定于环境的名称空间的功能,但我自己找不到自定义此功能的方法,尽管此文档说应该可以覆盖:https ://docs.gitlab.com/ee/user /project/clusters/#deployment-variables
在更新到 12.2 之后,我还删除了集群并在 GitLab 中重新创建了它,因此所有内容都可以根据更改日志获得,但我仍然无法弄清楚如何为我的所有暂存微服务创建一个专用的暂存命名空间。
解决方案
推荐阅读
- c - 降序链表显示不按顺序显示
- javascript - 我有一个js出现效果问题
- amazon-web-services - aws runInstance 资源被拒绝显式允许所有资源
- django - Django ValueError:无法配置处理程序“文件”
- reactjs - 在 Laravel/React 项目中找不到 React 代码
- php - Laravel store multiple 只保存一个
- java - (Java Swing) 我的动画线程没有并行运行
- mongodb - Mongodb groupby日期和id范围
- sql-server - SQL 错误日志在 SQL Server 中不可见
- json - 如何在 Mulesoft 中比较 XML 中的 json 对象值