ELOS Technologies Blog

OpenShift v AWS: bezpečná instalace v Landing Zone

Written by Jan Burian | 5.3.2026 10:25:31

Instalace Red Hat OpenShift Container Platform (OCP) 4 do AWS účtu v rámci Landing Zone organizace přináší specifická omezení, která je třeba zohlednit již při plánování instalace. Landing Zone účty jsou typicky spravovány centrálně a bývají omezeny z hlediska IAM oprávnění, síťové topologie nebo bezpečnostních politik — například zákazem veřejných S3 bucketů, restrikcí na vytváření VPC či požadavkem na použití krátkodobých credentials místo dlouhodobých IAM klíčů.

Právě požadavek na krátkodobé credentials je jedním z hlavních důvodů, proč je v takovém prostředí vhodná (nebo nutná) integrace s AWS Security Token Service (STS). OCP tuto integraci podporuje prostřednictvím Cloud Credential Operatoru (CCO) v manuálním režimu, kdy jednotlivé komponenty clusteru přebírají IAM role s krátkodobými credentials namísto sdíleného admin účtu.

V tomto článku se zaměříme na konkrétní typ instalace:

  • IPI (Installer Provisioned Infrastructure) na AWS s customizací
  • Integrace s AWS STS pro správu credentials
  • Privátní cluster s privátním S3 bucketem

Článek nepokrývá přípravu image mirror pro restricted/air-gapped prostředí — předpokládáme přístup k Red Hat container registry, tedy jedná se o tzv. connected instalaci.

Architektura

Před samotnou instalací je užitečné si ujasnit, jakou architekturu budeme budovat a jak jednotlivé komponenty do sebe zapadají.

Vysoká dostupnost

Cluster je nasazen do tří Availability Zones (eu-central-1a/b/c), čímž je zajištěna vysoká dostupnost na úrovni infrastruktury. Každá AZ obsahuje:

  • jeden Master node (r6a.xlarge) s lokální instancí etcd — tři master nody tvoří quorum control plane
  • dva Worker nody (t3.2xlarge, disk gp3 200 GB) — celkem 6 worker nodů napříč clusterem
  • jeden Infra node (m6a.2xlarge, disk gp3 200 GB) — určený pro infrastrukturní komponenty (Ingress router, Image Registry, Monitoring, Logging)
 V první AZ je dočasně přítomen také Bootstrap node, který zajišťuje počáteční bootstrap control plane. Po dokončení instalace je automaticky odstraněn.


Privátní cluster v Landing Zone

Síťová infrastruktura (VPC, subnety, routing) je předpřipravena na úrovni Landing Zone. Cluster je nasazen výhradně do privátních subnetů — nevznikají žádné veřejné endpointy. Přístup na API server i Ingress je zajištěn přes interní Load Balancery, přičemž DNS záznamy jsou spravovány v privátní Route 53 Hosted Zone. Komunikace z on-premise nebo jiných VPC je řešena na úrovni Landing Zone (Transit Gateway, VPN apod.) a není předmětem tohoto článku.

STS integrace

Místo dlouhodobých IAM credentials používají jednotlivé operátory clusteru krátkodobé tokeny získané přes AWS STS. Každý operátor má vlastní Service Account Token (signed JWT) vydaný Kubernetes API Serverem. Při potřebě přístupu k AWS API operátor zavolá AssumeRoleWithWebIdentity na AWS STS, který ověří token vůči OIDC Provideru. Za OIDC endpointem stojí CloudFront distribuce s privátním S3 bucketem, který obsahuje JWKS (veřejné klíče pro ověření tokenů). Po úspěšném ověření STS vrátí krátkodobé credentials s oprávněními příslušné IAM role.

Diagram

Předpoklady

Před zahájením instalace je třeba mít připraveno:

  • AWS účet s dostatečnými oprávněními (admin access)
  • Otevřené FW pravidla pro connected instalaci:
    • Telemetrii směrem do Red Hat cloudu
    • Přístup k Red Hat container image registry
  • Pull secret
  • Bastion host v AWS účtu (viz. níže)
  • Definované interní sítě OCP clusteru
  • Certifikáty (pokud se používají vlastní)
  •  Route 53 hosted zone pro base domain clusteru  

Příprava bastion hostu

Bastion host slouží jako výchozí bod celé instalace. Veškerá komunikace s AWS API a OCP API probíhá přes něj. Ačkoliv by bylo možné instalaci realizovat i bez něj, použijeme jej jako univerzální přístupový bod pro instalaci a správu OpenShift clusteru. Pro bastion potřebujeme zajistit přístup s potřebnými oprávněními k AWS API, aby instalátor mohl provést nezbytné operace.

V AWS konzoli

Na bastionu — konfigurace AWS CLI

Z AWS konzole si zkopírujte ARN nově vytvořené role pro EC2 instanci a uložte tuto hodnotu do proměnné prostředí, viz níže. Dále s pomocí tohoto údaje vytvoříme konfigurační soubor pro AWS CLI. Region případně upravte podle regionu vašeho AWS účtu.

AWS_IAM_EC2_ROLE_ARN=arn:aws:iam::<acc_ID>:role/<IAM Role name>

mkdir ~/.aws
cat > ~/.aws/config << EOF
[default]
region = eu-central-1
output = json

[profile ec2admin]
arn = ${AWS_IAM_EC2_ROLE_ARN}
credential_source = Ec2InstanceMetadata
region = eu-central-1
EOF

Nakonec ověříme funkčnost přístupu k AWS API pomocí tohoto příkazu, který nám v případě úspěšného volání vrátí identitu dané IAM role.

aws sts get-caller-identity

Příprava instalačních binárních souborů

Pro instalaci jsou potřebné tři nástroje: openshift-install, oc a ccoctl. Stáhneme konkrétní minor verzi:

TARGET_MINOR_VERSION="4.20"
mkdir ~/bin && cd ~/bin

wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable-${TARGET_MINOR_VERSION}/openshift-install-linux.tar.gz
wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable-${TARGET_MINOR_VERSION}/openshift-client-linux.tar.gz
wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable-${TARGET_MINOR_VERSION}/ccoctl-linux.tar.gz

tar -xzf ccoctl-linux.tar.gz
tar -xzf openshift-client-linux.tar.gz
tar -xzf openshift-install-linux.tar.gz

rm -f ./*.tar.gz
cd ~

ccoctl je nástroj pro správu cloud credentials — v případě STS integrace ho použijeme k vytvoření všech potřebných AWS zdrojů (OIDC provider, IAM role, S3 bucket, CloudFront Distribution).

Příprava install-config.yaml

Generování základu

Vygenerujeme základní konfigurační soubor pro instalaci pomocí interaktivního průvodce instalačního programu.

mkdir -p ~/ocp4-install/install-config
cd ~/ocp4-install/install-config

openshift-install create install-config

Průvodce se zeptá na SSH klíč, platformu (aws), region, base domain (Route 53), název clusteru a pull secret.

Klíčové úpravy pro tuto instalaci

Vygenerovaný soubor je třeba upravit pro naše specifické požadavky:

credentialsMode: Manual — povinné pro STS integraci. CCO nebude spravovat credentials sám; ty budou vytvořeny pomocí ccoctl a vloženy do manifestů.

publish: Internal — přepne cluster do privátního režimu. API server i Ingress load balancery budou dostupné pouze z VPC, bez veřejných endpointů.

platform.aws.subnets — v Landing Zone prostředí je VPC a subnety předpřipraveny centrálně. Uvedeme ID existujících privátních subnetů; instalátor z nich VPC odvodí automaticky.

networking.machineNetwork — pro každý subnet uvedeme jeho vlastní CIDR.

Příklad install-config.yaml

apiVersion: v1
baseDomain: aws.example.org
credentialsMode: Manual
metadata:
name: ocp-dev

networking:
clusterNetwork:
- cidr: 10.16.0.0/14
hostPrefix: 23
machineNetwork:    # Jeden záznam pro každý subnet
- cidr: 10.10.1.0/24  # AZ eu-central-1a
- cidr: 10.10.2.0/24  # AZ eu-central-1b
- cidr: 10.10.3.0/24  # AZ eu-central-1c
networkType: OVNKubernetes
serviceNetwork:
- 10.12.0.0/16

platform:
aws:
region: eu-central-1
subnets: # Existující privátní subnety v Landing Zone VPC
- subnet-0a1b2c3d4e5f6a7b8  # AZ eu-central-1a
- subnet-0b2c3d4e5f6a7b8c9  # AZ eu-central-1b
- subnet-0c3d4e5f6a7b8c9d0  # AZ eu-central-1c

controlPlane:
hyperthreading: Enabled
name: master
platform:
aws:
type: r6a.xlarge
replicas: 3

compute:
- hyperthreading: Enabled
name: worker
platform:
aws:
type: t3.2xlarge
rootVolume:
type: gp3
size: 200
replicas: 6

publish: Internal

pullSecret: '<your-pull-secret>'
sshKey: '<your-ssh-public-key>'

Důležité: soubor si zálohujte — instalátor ho při generování manifestů “zkonzumuje”.

cp install-config.yaml install-config.yaml.bak

Příprava STS integrace

Tento krok vytvoří veškeré AWS zdroje potřebné pro STS integraci: privátní S3 bucket, OIDC provider, CloudFront distribuci a IAM roles s politikami pro jednotlivé komponenty clusteru.

Nejprve extrahujeme credential requests z release image.

RELEASE_IMAGE=$(openshift-install version | awk '/release image/{print $3}')
echo $RELEASE_IMAGE

cd ~/ocp4-install/
mkdir credrequests

 oc adm release extract --credentials-requests --cloud=aws \
--to=credrequests --from=${RELEASE_IMAGE} 

Poté spustíme ccoctl, který vytvoří všechny potřebné AWS zdroje najednou. Příznak --create-private-s3-bucket zajistí, že S3 bucket pro OIDC discovery dokument bude privátní — přístup bude řízen přes CloudFront, nikoliv přímým veřejným přístupem k bucketu. Hodnota pro parametr name musí odpovídat jménu clusteru v install-config.yaml v metadata.name atributu.

ccoctl aws create-all \
--name=${CLUSTER} \
--region=eu-central-1 \
--credentials-requests-dir=credrequests \
--output-dir=cco_out \
--create-private-s3-bucket

Výstupem jsou manifesty a TLS materiály v adresáři cco_out, které použijeme v dalším kroku.

Generování manifestů

Následně pomocí instalátoru a připraveného konfiguračního souboru pro instalaci vytvoříme instalační manifesty. Tyto manifesty obohatíme o manifesty z nástroje ccoctl vygenerované v předchozím kroku.

cd ~/ocp4-install/install-config

openshift-install create manifests

cp ../cco_out/manifests/* ./manifests
cp -a ../cco_out/tls ./

Zkopírované manifesty obsahují definice secrets s IAM role ARN pro jednotlivé OCP komponenty (image registry, ingress operator, machine API, apod.). Soubory TLS obsahují signing klíče pro OIDC.

Spuštění instalátoru

Nyní máme připravené vše potřebné pro zahájení instalačního procesu. Ten spustíme následujícím příkazem.

openshift-install create cluster

Instalátor pracuje ve dvou fázích s vlastními timeouty.

  1. Bootstrap fáze — čeká až 20 minut na dostupnost Kubernetes API poskytovaného bootstrap nodem
  2. Control plane fáze — čeká až 30 minut na dokončení bootstrap procesu a převzetí API control plane nody

Ukázka výstupu instalačního programu po dokončení první boostrap fáze a čekání na sestavení finálního control plane instalovaného clusteru:

INFO Waiting up to 20m0s for the Kubernetes API at https://api.ocp-dev.aws.example.org:6443...
INFO API v1.33.0 up
INFO Waiting up to 30m0s for bootstrapping to complete...

Ověření stavu clusteru

Po dokončení instalace nastavíme kubeconfig a ověříme stav clusteru.

export KUBECONFIG=~/ocp4-install/install-config/auth/kubeconfig

oc get nodes
oc get co

Všechny nody by měly být ve stavu Ready a všechny cluster operátory ve stavu Available=True, Progressing=False, Degraded=False.

Přístup ke konzoli

Zjistěte URL web console pomocí příkazu:

oc get route -n openshift-console

URL web konzole má formát https://console-openshift-console.apps.<cluster>.<base-domain>/

Heslo pro vestavěný účet kubeadmin najdete v instalačních souborech.

cat ~/ocp4-install/install-config/auth/kubeadmin-password; echo

Post-instalační konfigurace

Jakmile je cluster funkční, lze přistoupit k běžné post-instalační konfiguraci. Mezi typické kroky patří:

  • Nasazení vlastních certifikátů pro API endpoint a cluster subdoménu (apps wildcard)
  • Příprava infra nodů pro přesun infrastrukturních komponent (router, registry, monitoring)
  • Konfigurace autentizace a RBAC (napojení na IdP)
  • Konfigurace monitoringu a logování
  • Případná další konfigurace/integrace specifická pro prostředí Landing Zone

Tyto kroky jsou standardní a nejsou specifické pro STS instalaci.

Instalace OCP 4 do Landing Zone prostředí na AWS vyžaduje několik specifických rozhodnutí oproti standardní instalaci – použití existující síťové infrastruktury, privátní cluster bez veřejných endpointů a integraci s AWS STS pro bezpečnou správu credentials pomocí krátkodobých tokenů. Kombinace credentialsMode: manual, ccoctl a privátního S3 bucketu zajistí soulad s typickými bezpečnostními požadavky Landing Zone prostředí.

Tento článek pokrývá jeden konkrétní scénář instalace — existuje však celá řada proměnných, které mohou ovlivnit výsledek již od počátečního návrhu, přes konfigurační parametry až po dodatečné integrace na úrovni AWS. Každé prostředí je jiné a článek záměrně nezmiňuje možné komplikace během instalace, protože jejich příčiny jsou příliš různorodé na to, aby je pokryl univerzální návod.

Pokud řešíte instalaci OpenShiftu v prostředí AWS a potřebujete poradit — ať už s návrhem architektury nebo samotnou implementací — neváhejte se na nás obrátit. Rádi pomůžeme.