Kubernetes. Gitlab (ci/cd) (HTTP Basic: Access denied)

Thank you for reading this post, don't forget to subscribe!

1.Описание про­бле­мы
2.1.Решение про­бле­мы (кастыль)
2.2.Решение про­бле­мы (более адеватное)
3.Использование усло­вий

 

У меня имел­ся сле­ду­ю­щий про­ект, в кото­ром соби­ра­ют­ся 4 кон­тей­не­ра а даль­ше деп­ло­ят­ся в кла­стер kubernetes
вот при­мер helm чарта:

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/templates/deployment.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/templates/service.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/templates/ingress.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/Chart.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/values-mrunner.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/values-node.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/values-scheduler.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/values-web.yaml

далее пока­зы­ваю .gitlab-ci.yml при кото­ром у меня воз­ник­ли ошибки:

пере­мен­ная kubeconfig явля­ет­ся токе­ном кубер­не­те­са добав­лен­ным в пере­мен­ные  проекта:

при созда­нии секрета
kubectl --kubeconfig=$kubeconfig_url create secret docker-registry docker-login-$CI_PROJECT_NAME --docker-server=$CI_REGISTRY --docker-username=$CI_REGISTRY_USER --docker-password=$CI_REGISTRY_PASSWORD --docker-email=$GITLAB_USER_EMAIL -n $NAMESPACE

под кото­рым даль­ше будет выка­чи­вать­ся образ из registry я исполь­зо­вал встро­ен­ные переменные:
CI_REGISTRY_USER
CI_REGISTRY_PASSWORD
при их исполь­зо­ва­нии не выка­чи­ва­ет­ся один из обра­зов, вот вывод describe это­го pod

выле­та­ет ошибка:
unauthorized: HTTP Basic: Access denied
хотя под эти­ми учёт­ны­ми дан­ны­ми login про­хо­дит нормально.

нашёл сле­ду­ю­щие решения:

1.Костыльное - это добавить sleep между helm

 

2.Создать деплой токен - думаю оно правильнее:

Создаю Deploy Tokens

меня­ем немно­го .gitlab-ci.yml

этим самым мы полу­ча­ем pipeline в сле­ду­ю­щем виде:

рас­смот­рим что поме­ня­ли, ста­рый вариант:

kubectl --kubeconfig=$kubeconfig_url create secret docker-registry docker-login-$CI_PROJECT_NAME --docker-server=$CI_REGISTRY --docker-username=$CI_REGISTRY_USER --docker-password=$CI_REGISTRY_PASSWORD --docker-email=$GITLAB_USER_EMAIL -n $NAMESPACE

новый вари­ант:

kubectl --kubeconfig=$kubeconfig_url create secret docker-registry docker-login-$CI_PROJECT_NAME --docker-server="$CI_REGISTRY" --docker-username="$CI_DEPLOY_USER" --docker-password="$CI_DEPLOY_PASSWORD" --docker-email="$GITLAB_USER_EMAIL" -n $NAMESPACE

как видим мы изме­ни­ли CI_REGISTRY_USER  на CI_DEPLOY_USER    и CI_REGISTRY_PASSWORD  на CI_DEPLOY_PASSWORD

в таком вари­ан­те ста­ло нор­маль­но выкачиваться.

 

3.Использование условий

Теперь попра­вим шаб­ло­ны, что­бы для неко­то­рых про­ек­тов напри­мер не ста­вил­ся ingress, а для дру­гих исполь­зо­ва­лись раз­лич­ные  livenessProbe и readinessProbe

пра­вим шаб­ло­ны, при­во­дя их к сле­ду­ю­ще­му виду:

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/templates/deployment.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/templates/ingress.yaml

сер­вис я оста­вил без изменений:

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/templates/service.yaml

ну и пра­вим наши values
[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/values-mrunner.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/values-node.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/values-scheduler.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat helm/values-web.yaml

[root@prod-vsrv-kubemaster1 cache-builder]# cat .gitlab-ci.yml

оста­ёт­ся без изменений: