首页 > 解决方案 > 如何为所有 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 中重新创建了它,因此所有内容都可以根据更改日志获得,但我仍然无法弄清楚如何为我的所有暂存微服务创建一个专用的暂存命名空间。

标签: gitdockerkubernetesgitlab

解决方案


推荐阅读