
Hangar Dokumentation
Inhaltsverzeichnis
Quick Start
Installation von Hangar über das Helm Chart.
Installationsvoraussetzung
- K8s-Cluster
- DNS
- Cert-manager
- Issuer to create valid TLS-Cerst
- Ingress
- (optional) CSI-Storage
- Image Registry
- optional:
- IAM Provider
- ein OIDC Provider mit einem OIDC Hangar Client
- OIDC Token müssen
profile
,email
,roles
scopes unterstützen
- IAM Provider
Vorbereitung der Hangar Images
Im Tarball enthalten sind die notwendigen Hangar Images. Diese müssen vorab in eine Image-Registry importiert werden.
docker image import file - [REPOSITORY[:TAG]]
docker image import hangar-images/backend-config-service.tar registry:5000/hangar/backend/config-service:10.25
docker image import hangar-images/backend-dashboard-service.tar registry:5000/hangar/backend/dashboard-service:10.25
docker image import hangar-images/backend-management-service.tar registry:5000/hangar/backend/management-service:10.25
docker image import hangar-images/backend-node-service.tar registry:5000/hangar/backend/node-service:10.25
docker image import hangar-images/backend-oidc-provider.tar registry:5000/hangar/backend/oidc-provider:10.25
docker image import hangar-images/frontend-ui.tar registry:5000/hangar/frontend/ui:10.25
Helm Installation
Die Hangar Installation erfolge via Helm Chart.
helm install hangar hangar-0.0.0-10-25.tgz -f hangar-values.yaml
In den Values sind folgende Werte zu setzen um eine erfolgreiche Installation mit Authentifizierung durchzuführen.
Die unten aufgeführte Values File installiert einen Keycloak als IAM Provider mit.
Wichtig:
Die Keycloak Einstellungen sind nicht produktionsreif und dienen nur dazu einen IAM Provider mitzuliefen.
Am besten wird Hangar an einen bestehenden IAM Provider angebunden.
global:
hangarHost: "<URL-der Hangar Installtion>"
hangarSuperAdmins:
- hangar-super-admin@example.com # Mail Adressen der IAM Nutzer die SuperAdmin-Rechte in Hangar erhalten sollen
# Secrets
secrets:
# base64 data of a client id
oAuthClientID: ""
# base64 data of client secret
oAuthClientSecret: ""
ingress:
className: "nginx"
annotations:
cert-manager.io/issuer: "<Issuer for TLS Certs>" # predefined Cert-Issuer
keycloak:
enabled: true
database:
# place a secret in keycloak namespace with usernameKey and passwordKey data and set values.
# this user will be used as keycloak database user
existingSecret: keycloak-postgresql
configCli:
enabled: true
# this will create a keycloak client for hangar with example users
# Use only for testing
createHangarClientConfig:
enabled: true
deployTheme: false
ingress:
enabled: true
ingressClassName: nginx
annotations:
cert-manager.io/issuer: "<Issuer for TLS Certs>" # predefined Cert-Issuer
# nginx.ingress.kubernetes.io/proxy-buffer-size: 128k
# cert-manager.io/cluster-issuer: letsencrypt-prod
# set host for keycloak if it is different from hangar uri
# host: <keyclaok host uri if different from hangar host>
httpRelativePath: "/_keycloak/"
tls: true
Zusätzlich muss noch die Image Registry ergänzt werden:
frontend:
image:
repository: registry:5000/hangar/frontend/ui
tag: "10.25"
oidcProvider:
image:
repository: registry:5000/hangar/backend/oidc-provider
tag: "10.25"
dashboardService:
image:
repository: registry:5000/hangar/backend/dashboard-service
tag: "10.25"
managementService:
image:
repository: registry:5000/hangar/backend/management-service
tag: "10.25"
nodeService:
image:
repository: registry:5000/hangar/backend/node-service
tag: "10.25"
configService:
image:
repository: registry:5000/hangar/backend/config-service
tag: "10.25"
Alternative Installation ohne Authentifizierung
Ohne Keycloak und IAM Provider kann Hangar durch setzen des disabledAuth
Flags installiert werden.
Wichtig:
Achtung damit erfolgt keine Authentifizierung zur Hangar UI und diese ist offen zugänglich.
helm install hangar hangar-0.0.0-10-25.tgz --set global.hangarHost="<URL-der Hangar Installtion>" --set disableAuth=true
Hangar UI lässt sich über <URL-der Hangar Installtion>
aufrufen.
Configuration
IAM Nutzerverwaltung – Keycloak
Nutzer lassen sich über Keycloak anlegen
https:///<Hangar_Install_URL>
/_keycloak/admin/master/console/#/hangar/users
Über das default im Helm-Chart werden bereits folgende Nutzer ausgerollt.
hangar-super-admin@example.com : change-super-admin-password
hangar-cluster-admin@example.com : change-cluster-admin-password
hangar-cluster-user@example.com : change-cluster-user-password
Wichtig:
Passwörter in der Keycloak UI für diese Nutzer nach der Installation ändern!
Hangar – Nutzerrechte
Hangar Super Admin
Die Hangar SuperAdmins werden über das Helm Chart konfiguriert unter dem Key wird ein Array mit Super Admin Nutzern aufgelistet
hangarSuperAdmins:
- hangar-super-admin@example.com
Super Admins sind berechtig neue Cluster zu erstellen und den Infrastruktur Cluster zu konfigurieren.
Hangar Cluster Admin
Hangar Cluster Admins werden über die Cluster Einstellungen konfiguriert und können ihren jeweiligen Cluster konfigurieren und Compute Ressourcen hinzufügen.
Hangar Cluster User
Hangar Cluster Users werden ebenfalls über die Cluster Einstellungen konfiguriert. User können ihre jeweiligen Cluster sehen und eine Kubeconfig
für den jeweiligen Cluster laden.
Hangar – Infrastruktur Cluster
Hangar startet nach der Installation einen Infrastruktur Cluster, dieser verwaltet und bietet den Managed Clustern virtuelle Compute Ressourcen die einfach hinzugefügt werden können.
Dazu werden dem Infrastruktur Cluster Kubernetes Worker Nodes angebunden auf denen die virtuellen Compute Ressourcen für die Managed Cluster bereit gestellt werden.
Übersicht Infra Cluster
Als Hangar Super Admin kann man die Überblicksseite des InfrastrukturClusters einsehen und sehen an welchen Managed Cluster diese Virtuellen Nodes angebunden sind.
Anbinden Worker Nodes
Um virtuelle compute Ressourcen bereit stellen zu können müssen an den Infrastruktur Cluster Kubernetes Worker Nodes angebunden werden, dazu sollte das im Tarball mitgelieferte Ansible Playbook genutzt werden.
Vorab müssen aus der Hangar Installation Informationen zu dem Infrastruktur Cluster abgerufen werden.
kubectl describe namespace --selector=hangar.atix.de/is-infrastructure=true
Name: default-infrastructure-cluster-btqc6
Labels: app.kubernetes.io/managed-by=hangar
app.kubernetes.io/part-of=k8s-control-plane
hangar.atix.de/is-infrastructure=true
hangar.atix.de/k8s-version=1.32.9
kubernetes.io/metadata.name=default-infrastructure-cluster-btqc6
Annotations: hangar.atix.de/control-plane-node-port: 31676
hangar.atix.de/konnectivity-proxy-node-port: 32140
Status: Active
No resource quota.
No LimitRange resource.
Diese müssen in das Ansible Inventory übertragen werden.
all:
vars:
hangar_subcluster_namespace: "default-infrastructure-cluster-btqc6" # kubernetes.io/metadata.name aus dem Namespace
kubernetes_worker_pod_cidr: "10.32.0.0/17"
kubernetes_worker_version: "1.32.9"
kubernetes_api_server_endpoint: "https://<Hangar Installations URL>:31676" # hangar.atix.de/control-plane-node-port aus dem Namespace
kubernetes_worker_konnectivity_server_ip: "<Hangar Installations URL>"
kubernetes_worker_konnectivity_server_port: "32140" # hangar.atix.de/konnectivity-proxy-node-port aus dem Namespace
hosts:
<definition der hinzuzufügenden Kubernetes Worker Nodes>
Unter dem hosts:
Key werden die Worker Nodes gelistet
all:
vars:
<siehe oben>
hosts:
node-1:
ansible_host: <IP der node>
ansible_user: root
kubernetes_worker_node_name: "node-1" # name im Infrastruktur Cluster
kubernetes_worker_local_pod_cidr: "10.32.0.0/24" # Pod CDIR für diese Node
node-2:
ansible_host: <IP der node>
ansible_user: root
kubernetes_worker_node_name: "node-2" # name im Infrastruktur Cluster
kubernetes_worker_local_pod_cidr: "10.32.1.0/24" # Pod CDIR für diese Node
Es können beliebig viele Nodes gelistet und angebunden werden. Die Nodenamen können freigewählt werden es empfiehlt sich aber eine fortlaufende Nummerierung. Bei der Pod CIDR muss das dritte Oktett hochgezählt werden und jede Workernode benötigt ein eigenes und sich nicht überschneidendes Netz.
Durch das ausführen des Playbooks werden die Nodes dem Infracluster hinzugefügt.
Wichtig ist dabei das kubectl
vorhanden ist und die aktuelle kubeconfig
auf den Cluster zeigt in dem Hangar installiert wurde.
export KUBECONFIG=~/.kube/config
kubectl get pods -n hangar
NAME READY STATUS RESTARTS
hangar-config-service-68b8878-tvtgk 1/1 Running 0
hangar-dashboard-service-77b9dfc5d6-4jdv4 1/1 Running 0
hangar-documentation-6d6d559b6b-jk2g8 1/1 Running 0
hangar-frontend-5f66844984-brpnp 1/1 Running 0
hangar-keycloak-7466b8895d-lf742 1/1 Running 0
hangar-keycloak-postgres-6cb5879cb5-2vncc 1/1 Running 0
hangar-management-service-7ccb94bdbb-jlcs2 1/1 Running 0
hangar-node-service-76b7c664d8-qwd4t 1/1 Running 0
hangar-oidc-provider-6fbd48cdc9-8f782 1/1 Running 0
robots-deployment-6cf9654ddb-sssfn 1/1 Running 0
Dann kann das Playbook wie folgt aus dem Playbook Directory gestartet werden.
ansible-playbook -i inventory.yaml playbook.yaml
Managed Hangar Cluster
Cluster Management
Cluster Management als Hangar-Superadmin.
Cluster erstellen
Zum erstellen eines Managed Cluster reicht ein klick auf den “New Cluster” Button. In dem Modal einen Namen für den Cluster vergeben.
Nach dem erstellen des Clusters sieht man in der Cluster Overview alle Control-Plane Komponenten und der Status.
Cluster Config
Berechtigungen für die Managed Clusters werden über das Menü Manage Clusters verwaltet. Dort lassen sich auch die Kubernetes Version und Compute Nodes für die Cluster konfigurieren.
Cluster User Management
Durch einen klick auf den den Edit-Stift lassen sich Admins und User dem Cluster hinzufügen.
User können in der Hangar-UI Cluster sehen. Admins können zusätzlich Cluster verwalten. Weitere Nutzer hinzufügen oder entfernen sowie Compute Nodes verwalten.
Cluster Worker Nodes anbinden
Um Workloads ausführen und Pods starten zu können müssen Worker Nodes an den Managed Cluster angebunden werden.
Dazu auf der “Manage Cluster” Scale Nodes anklicken und die Anzahl der gewünschten Nodes wählen.
Hangar wird die gewählten Virtuellen Nodes dem Cluster joinen – vorausgesetzt im gewählten InfrastrukturCluster sind genug Compute Ressourcen vorhanden.
Alternative können auch eigene Worker Nodes mit den Kubernetes üblichen Tools angebunden werden.