Я попытался добавить gitlab-агент в среду и выбрать там пространство имен и настройку флюса, но получаю ошибки.
Я использую версию Self-Manager, размещенную на Gitlab, в Kubernetes.
Установите команду gitlab-агента
helm upgrade --install h gitlab/gitlab-agent \
--namespace gitlab-agent-h \
--create-namespace \
--set image.tag=v17.2.2 \
--set config.token=token \
--set config.kasAddress=wss://kas.domain.com
Настройте gitlab-agent по пути .gitlab/agents/my-agent/config.yaml в репозитории.
user_access:
access_as:
agent: {}
groups:
- id: LearnHub
- id: LearnHub/Frontend
- id: LearnHub/Identity
ci_access:
groups:
- id: LearnHub
- id: LearnHub/Frontend
- id: LearnHub/Identity
Установить поток команд
flux bootstrap gitlab \
--hostname=gitlab.domain.com \
--owner=Flux-LearnHub \
--repository=Flux \
--branch=main \
--path=clusters/production \
--deploy-token-auth
Добавление репозитория
flux create source git learnhub-mainpage \
--url=https://gitlab.domain.com/learnhub/frontend/mainpage.git \
--branch=main \
--interval=1m \
--namespace=flux-system \
--username=username \
--password=token
flux create kustomization learnhub-mainpage-kustomization \
--source=GitRepository/learnhub-mainpage.flux-system \
--path = "./manifests" \
--prune=true \
--interval=5m \
--namespace=flux-system
И я не вижу в выборе настройки Flux или пространства имен.
Я попытался вручную предоставить роль администратора кластера gitlab-agent для тестирования.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: gitlab-agent-cluster-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: learnhub-gitlab-agent # name ServiceAccount
namespace: gitlab-agent
И я убедился, что gitlab-agent имеет права на все неймспейсы, но в списке все равно ничего не появляется, подскажите как это исправить.
Еще я заметил, что все запросы на доступ к gitlab kas возвращаются с ошибкой 401, причем это касается конкретно тех запросов, по которым я создал вопрос.
https://kas.domain.com/k8s-proxy/api/v1/namespaces
https://kas.domain.com/k8s-proxy/apis/kustomize.toolkit.fluxcd.io/v1/namespaces/gitlab-agent/kustomizations
https://kas.domain.com/k8s-proxy/apis/helm.toolkit.fluxcd.io/v2beta1/namespaces/gitlab-agent/helmreleases
Общий ответ
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "GitLab Agent Server: Unauthorized: no valid credentials provided",
"reason": "Unauthorized",
"code": 401
}
От Gitlab у нас есть рекомендация ниже:
An error like GitLab Agent Server: Unauthorized. Trace ID: <...> on the Dashboard for Kubernetes page might be caused by one of the following:
The user_access entry in the agent configuration file doesn’t exist or is wrong.
To resolve, see Grant users Kubernetes access.
There are multiple _gitlab_kas cookies in the browser and sent to KAS. The most likely cause is multiple GitLab instances hosted on the same site.
For example, gitlab.com set a _gitlab_kas cookie targeted for kas.gitlab.com, but the cookie is also sent to kas.staging.gitlab.com, which causes the error on staging.gitlab.com.
To temporarily resolve, delete the _gitlab_kas cookie for gitlab.com from the browser cookie store. Issue 418998 proposes a fix for this known issue.
GitLab and KAS run on different sites. For example, GitLab on gitlab.example.com and KAS on kas.example.com. GitLab does not support this use case. For details, see issue 416436.
Справочная ссылка:
https://docs.gitlab.com/ee/user/clusters/agent/troubleshooting.html
Я проверил все описанные вами варианты, кроме объединения домена kas.example.com и gitlab.example.com, потому что даже если я создам ингресс и изменю URL в агенте gitlab, я не смогу повлиять на домен, к которому веб-сервис делает запросы. Все остальные варианты не помогли. Спасибо
Значит, у вас другой адрес?
Если вы имеете в виду зеркало основного домена, то нет. Если вы имеете в виду разделение домена на kas.domain.com и gitlab.domain.com, то да, они разделены разными поддоменами.
Да. Я говорил о разных поддоменах.
В моем случае возникла проблема с разделением доменов как указано в ответе, мне помогло решение объединения домена выше kas.domain.com и gitlab.domain.com в 1 домен. И в этом случае запрос будет соответствовать этому URL.
https://gitlab.domain.com/k8s-proxy/api/v1/namespaces
Вместо
https://kas.domain.com/k8s-proxy/api/v1/namespaces
Проблема у меня была в том, что если бы у меня было всего 2 входа, которые отвечают за gitlab и kas, веб-сервер обращался бы к старому домену и получал бы 404. Это исправлялось такими параметрами при обновлении gitlab.
--set global.hosts.kas.name=gitlab.domain.com
диаграмма управления рулем kas встроена в диаграмма управления рулем gitlab
И после вышеописанного действия меняем ингресс, объединив 2 домена в 1 и получаем нечто похожее.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gitlab-ingress
namespace: gitlab
annotations:
cert-manager.io/issuer: "letsencrypt-prod"
spec:
ingressClassName: nginx
rules:
- host: gitlab.domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: gitlab-webservice-default
port:
number: 8181
- path: /k8s-proxy/
pathType: Prefix
backend:
service:
name: gitlab-kas
port:
number: 8154
- path: /kas
pathType: Prefix
backend:
service:
name: gitlab-kas
port:
number: 8150
tls:
- hosts:
- gitlab.domain.com
secretName: gitlab-tls
Вместо этого рассмотрите возможность задать вопросы системному администратору (например, об установке готового программного обеспечения) на serverfault.com. Stack Overflow предназначен для вопросов по программированию.