HyperShift Operator Installation
This document describes different installation flags or methods for HyperShift Operator (HO).
Limiting the CAPI CRDs installed
The HO uses the Cluster API (CAPI) to manage the nodes in the NodePool. By default, the HO installation will install all
CAPI related CRDs. If you want to limit the CRDs installed, you can set the --limit-crd-install flag to a
comma-separated list of CRDs to install. The valid values for this flag are: AWS, Azure, IBMCloud, KubeVirt, Agent,
OpenStack.
For example, to only install the AWS and Azure related CAPI CRDs, you would use the following flag in your HO install command:
--limit-crd-install=AWS,Azure
Important
Limiting the CAPI CRDs installed means the HO will only be able to manage HostedClusters of the same platform. For example, in the above example, if you limit the CRDs to AWS and Azure, the HO will only be able to manage AWS and Azure HostedClusters.
AWS operator IAM roles
When installing the HyperShift operator on AWS, the operator and its external-dns
component need AWS credentials. Instead of providing long-lived credential files,
you can create least-privilege IAM roles and pass their ARNs to the install
command. The hypershift create operator-roles aws command automates role
creation, and the hypershift install command accepts role ARN flags as
alternatives to credential file flags.
Creating operator roles
The hypershift create operator-roles aws command creates three IAM roles:
| Role | Purpose |
|---|---|
<prefix>-operator-ec2 |
EC2 VPC endpoint service management, ELB discovery, and instance type queries |
<prefix>-operator-oidc-s3 |
Upload and delete OIDC discovery documents in the S3 bucket |
<prefix>-external-dns |
Route53 DNS record management for external-dns |
The command supports two trust modes, depending on whether the management cluster has an OIDC provider registered in AWS IAM:
- OIDC web identity (default): The roles trust the management cluster's OIDC
provider and are scoped to specific service accounts. If
--oidc-issuer-urlis not specified, the command auto-discovers it from the management cluster'sAuthenticationCR. - Instance role assumption: For clusters without an OIDC provider, use
--instance-role-arnto trust an existing instance role viasts:AssumeRole.
Usage
hypershift create operator-roles aws \
--oidc-storage-provider-s3-bucket-name <bucket-name> \
[--region <aws-region>] \
[--name-prefix <prefix>] \
[--oidc-issuer-url <url> | --instance-role-arn <arn>] \
[--route53-hosted-zone-id <zone-id>] \
[--operator-namespace <namespace>] \
[--output-file <path>] \
[--additional-tags key=value,...]
Flags
| Flag | Required | Default | Description |
|---|---|---|---|
--oidc-storage-provider-s3-bucket-name |
Yes | S3 bucket name for OIDC documents (scopes the S3 policy) | |
--region |
No | AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config |
AWS region |
--name-prefix |
No | hypershift |
Prefix for IAM role names |
--oidc-issuer-url |
No | Auto-discovered from cluster | Management cluster OIDC issuer URL for web identity trust. Mutually exclusive with --instance-role-arn |
--instance-role-arn |
No | ARN of an instance role to trust via sts:AssumeRole. Mutually exclusive with --oidc-issuer-url |
|
--route53-hosted-zone-id |
No | All zones | Route53 hosted zone ID to scope the external-dns policy |
--operator-namespace |
No | hypershift |
Namespace where the HyperShift operator is installed |
--output-file |
No | stdout | Path to write JSON output |
--additional-tags |
No | Additional tags to set on IAM resources (key=value) |
Output
The command outputs a JSON object with the ARNs of the created roles:
{
"operatorEC2RoleARN": "arn:aws:iam::123456789012:role/hypershift-operator-ec2",
"operatorOIDCS3RoleARN": "arn:aws:iam::123456789012:role/hypershift-operator-oidc-s3",
"externalDNSRoleARN": "arn:aws:iam::123456789012:role/hypershift-external-dns"
}
Example: OIDC web identity (auto-discovered)
hypershift create operator-roles aws \
--oidc-storage-provider-s3-bucket-name my-oidc-bucket \
--route53-hosted-zone-id Z0123456789ABCDEF \
--output-file operator-roles.json
Example: Instance role trust
hypershift create operator-roles aws \
--oidc-storage-provider-s3-bucket-name my-oidc-bucket \
--instance-role-arn arn:aws:iam::123456789012:role/my-instance-role \
--output-file operator-roles.json
Installing with role ARNs
The hypershift install command accepts IAM role ARNs as alternatives to
credential file flags. When a role ARN is provided, the installer generates
a credential file automatically based on --aws-role-credential-source.
Role ARN install flags
| Flag | Replaces | Description |
|---|---|---|
--aws-private-role-arn |
--aws-private-creds |
IAM role ARN for EC2/ELBv2 credentials |
--oidc-storage-provider-s3-role-arn |
--oidc-storage-provider-s3-credentials |
IAM role ARN for OIDC S3 access |
--external-dns-role-arn |
--external-dns-credentials |
IAM role ARN for external-dns Route53 access |
--aws-role-credential-source |
Credential source: web-identity (default) or ec2-instance-metadata |
|
--aws-operator-roles-file |
Path to JSON output from create operator-roles aws (sets all three role ARN flags at once) |
Note
Each role ARN flag is mutually exclusive with its corresponding credential
file flag. You cannot combine --aws-private-role-arn with
--aws-private-creds, for example.
Credential source modes
The --aws-role-credential-source flag controls how the operator assumes the
IAM roles:
web-identity(default): Uses a projected service account token mounted at/var/run/secrets/openshift/serviceaccount/token. Requires the management cluster's OIDC provider to be registered in AWS IAM.ec2-instance-metadata: Uses the EC2 instance metadata service to assume the role. Suitable for clusters running on EC2 instances that have an instance profile attached.
Example: Install using the roles file
The simplest workflow combines create operator-roles aws with install:
# Step 1: Create the IAM roles
hypershift create operator-roles aws \
--oidc-storage-provider-s3-bucket-name my-oidc-bucket \
--output-file operator-roles.json
# Step 2: Install using the roles file
hypershift install \
--oidc-storage-provider-s3-bucket-name my-oidc-bucket \
--oidc-storage-provider-s3-region us-east-1 \
--private-platform AWS \
--aws-private-region us-east-1 \
--external-dns-provider aws \
--external-dns-domain-filter example.com \
--aws-operator-roles-file operator-roles.json