Ansible Bootstrap Configurations

This section describes Ansible bootstrap configuration options.

Install-time-only parameters

Some Ansible bootstrap parameters can not be changed or are very difficult to change after installation is complete.

Review the set of install-time-only parameters before installation and confirm that your values for these parameters are correct for the desired installation.

Note

If you notice an incorrect install-time-only parameter value before you unlock controller-0 for the first time, you can re-run the Ansible bootstrap playbook with updated override values and the updated values will take effect.

Install-time-only parameters

System Properties

  • system_mode

  • distributed_cloud_role

Network Properties

  • pxeboot_subnet

  • pxeboot_start_address

  • pxeboot_end_address

  • management_subnet

  • management_start_address

  • management_end_address

  • cluster_host_subnet

  • cluster_host_start_address

  • cluster_host_end_address

  • cluster_pod_subnet

  • cluster_pod_start_address

  • cluster_pod_end_address

  • cluster_service_subnet

  • cluster_service_start_address

  • cluster_service_end_address

  • management_multicast_subnet

  • management_multicast_start_address

  • management_multicast_end_address

Docker Proxies

  • docker_http_proxy

  • docker_https_proxy

  • docker_no_proxy

Docker Registry Overrides

  • docker_registries

    • k8s.gcr.io

      • url

      • username

      • password

      • secure

    • gcr.io

      • url

      • username

      • password

      • secure

    • ghcr.io

      • url

      • username

      • password

      • secure

    • quay.io

      • url

      • username

      • password

      • secure

    • docker.io

      • url

      • username

      • password

      • secure

    • docker.elastic.co

      • url

      • username

      • password

      • secure

    • registry.k8s.io

      • url

      • username

      • password

      • secure

    • defaults

      • url

      • username

      • password

      • secure

Certificates

  • k8s_root_ca_cert

  • k8s_root_ca_key

Kubernetes Parameters

  • apiserver_oidc

IPv6

If you are using IPv6, provide IPv6 configuration overrides for the Ansible bootstrap playbook. Note that all addressing, except pxeboot_subnet, should be updated to IPv6 addressing.

Example IPv6 override values are shown below:

dns_servers:
‐ 2001:4860:4860::8888
‐ 2001:4860:4860::8844
pxeboot_subnet: 169.254.202.0/24
management_subnet: 2001:db8:2::/64
cluster_host_subnet: 2001:db8:3::/64
cluster_pod_subnet: 2001:db8:4::/64
cluster_service_subnet: 2001:db8:4::/112
external_oam_subnet: 2001:db8:1::/64
external_oam_gateway_address: 2001:db8::1
external_oam_floating_address: 2001:db8::2
external_oam_node_0_address: 2001:db8::3
external_oam_node_1_address: 2001:db8::4
management_multicast_subnet: ff08::1:1:0/124

Note

The external_oam_node_0_address, and external_oam_node_1_address parameters are not required for the AIO‐SX installation.

Private registry

To bootstrap StarlingX you must pull container images for multiple system services. By default these container images are pulled from public registries: k8s.gcr.io, gcr.io, quay.io, and docker.io.

It may be required (or desired) to copy the container images to a private registry and pull the images from the private registry (instead of the public registries) as part of the StarlingX bootstrap. For example, a private registry would be required if a StarlingX system was deployed in an air-gapped network environment.

Use the docker_registries structure in the bootstrap overrides file to specify alternate registry(s) for the public registries from which container images are pulled. These alternate registries are used during the bootstrapping of controller-0, and on system application-apply of application packages.

The docker_registries structure is a map of public registries and the alternate registry values for each public registry. For each public registry the key is a fully scoped registry name of a public registry (for example “k8s.gcr.io”) and the alternate registry URL and username/password (if authenticated).

url

The fully scoped registry name (and optionally namespace/) for the alternate registry location where the images associated with this public registry should now be pulled from.

Valid formats for the url value are:

  • Domain. For example:

    example.domain
    
  • Domain with port. For example:

    example.domain:5000
    
  • IPv4 address. For example:

    1.2.3.4
    
  • IPv4 address with port. For example:

    1.2.3.4:5000
    
  • IPv6 address. For example:

    FD01::0100
    
  • IPv6 address with port. For example:

    [FD01::0100]:5000
    
username

The username for logging into the alternate registry, if authenticated.

password

The password for logging into the alternate registry, if authenticated.

Additional configuration options in the docker_registries structure are:

defaults

A special public registry key which defines common values to be applied to all overrideable public registries. If only the defaults registry is defined, it will apply url, username, and password for all registries.

If values under specific registries are defined, they will override the values defined in the defaults registry.

Note

The defaults key was formerly called unified. It was renamed in StarlingX R3.0 and updated semantics were applied.

This change affects anyone with a StarlingX installation prior to R3.0 that specifies alternate Docker registries using the unified key.

secure

Specifies whether the registry(s) supports HTTPS (secure) or HTTP (not secure). Applies to all alternate registries. A boolean value. The default value is True (secure, HTTPS).

Note

The secure parameter was formerly called is_secure_registry. It was renamed in StarlingX R3.0.

If an alternate registry is specified to be secure (using HTTPS), the certificate used by the registry may not be signed by a well-known Certificate Authority (CA). This results in the docker pull of images from this registry to fail. Use the ssl_ca_cert override to specify the public certificate of the CA that signed the alternate registry’s certificate. This will add the CA as a trusted CA to the StarlingX system.

ssl_ca_cert

The ssl_ca_cert value is the absolute path of the certificate file. The certificate must be in PEM format and the file may contain a single CA certificate or multiple CA certificates in a bundle.

The following example will apply url, username, and password to all registries.

docker_registries:
  defaults:
    url: my.registry.io
    username: myreguser
    password: myregP@ssw0rd

The next example applies username and password from the defaults registry to all public registries. url is different for each public registry. It additionally specifies an alternate CA certificate.

docker_registries:
   k8s.gcr.io:
     url: my.k8sregistry.io
   gcr.io:
     url: my.gcrregistry.io
   ghcr.io:
     url: my.ghrcregistry.io
   docker.elastic.co
     url: my.dockerregistry.io
   quay.io:
     url: my.quayregistry.io
   docker.io:
     url: my.dockerregistry.io
   registry.k8s.io:
     url: my.registry.k8s.io
   defaults:
     url: my.registry.io
     username: myreguser
     password: myregP@ssw0rd

ssl_ca_cert: /path/to/ssl_ca_cert_file

Docker proxy

If the StarlingX OAM interface or network is behind a http/https proxy, relative to the Docker registries used by StarlingX or applications running on StarlingX, then Docker within StarlingX must be configured to use these http/https proxies.

Use the following configuration overrides to configure your Docker proxy settings.

docker_http_proxy

Specify the HTTP proxy URL to use. For example:

docker_http_proxy: http://my.proxy.com:1080
docker_https_proxy

Specify the HTTPS proxy URL to use. For example:

docker_https_proxy: https://my.proxy.com:1443
docker_no_proxy

A no-proxy address list can be provided for registries not on the other side of the proxies. This list will be added to the default no-proxy list derived from localhost, loopback, management, and OAM floating addresses at run time. Each address in the no-proxy list must neither contain a wildcard nor have subnet format. For example:

docker_no_proxy:
  - 1.2.3.4
  - 5.6.7.8

Kubernetes root CA certificate and key

By default the Kubernetes Root CA Certificate and Key are auto-generated and result in the use of self-signed certificates for the Kubernetes API server. In the case where self-signed certificates are not acceptable, use the bootstrap override values k8s_root_ca_cert and k8s_root_ca_key to specify the certificate and key for the Kubernetes root CA.

k8s_root_ca_cert

Specifies the certificate for the Kubernetes root CA. The k8s_root_ca_cert value is the absolute path of the certificate file. The certificate must be in PEM format and the value must be provided as part of a pair with k8s_root_ca_key. The playbook will not proceed if only one value is provided.

k8s_root_ca_key

Specifies the key for the Kubernetes root CA. The k8s_root_ca_key value is the absolute path of the certificate file. The certificate must be in PEM format and the value must be provided as part of a pair with k8s_root_ca_cert. The playbook will not proceed if only one value is provided.

Important

The default length for the generated Kubernetes root CA certificate is 10 years. Replacing the root CA certificate is an involved process so the custom certificate expiry should be as long as possible. We recommend ensuring root CA certificate has an expiry of at least 5-10 years.

The administrator can also provide values to add to the Kubernetes API server certificate Subject Alternative Name list using the apiserver_cert_sans override parameter.

apiserver_cert_sans

Specifies a list of Subject Alternative Name entries that will be added to the Kubernetes API server certificate. Each entry in the list must be an IP address or domain name. For example:

apiserver_cert_sans:
  - hostname.domain
  - 198.51.100.75

StarlingX automatically updates this parameter to include IP records for the OAM floating IP and both OAM unit IP addresses.

OpenID Connect authentication for Kubernetes cluster

The Kubernetes cluster can be configured to use an external OpenID Connect IDP, such as Azure Active Directory, Salesforce, or Google, for Kubernetes API authentication.

By default, OpenID Connect authentication is disabled. To enable OpenID Connect, use the following configuration values in the Ansible bootstrap overrides file to specify the IDP for OpenID Connect:

apiserver_oidc:
  client_id:
  issuer_url:
  username_claim:

When the three required fields of the apiserver_oidc parameter are defined, OpenID Connect is considered active. The values will be used to configure the Kubernetes cluster to use the specified external OpenID Connect IDP for Kubernetes API authentication.

In addition, you will need to configure the external OpenID Connect IDP and any required OpenID client application according to the specific IDP’s documentation.

If not configuring OpenID Connect, all values should be absent from the configuration file.

Note

Default authentication via service account tokens is always supported, even when OpenID Connect authentication is configured.

Platform Issuer (system-local-ca)

'system_local_ca_cert': # the certificate encoded in a single-line base64 string (via base64 -w0).
'system_local_ca_key': # the key encoded in a single-line base64 string (via base64 -w0).
'system_root_ca_cert': # the certificate encoded in a single-line base64 string (via base64 -w0).
'ica_duration':  # optional override for changing the minimum expected expiration time for the ICA provided in years (default is 3).
'rca_duration': # optional override for changing the minimum expected expiration time for the RCA provided in years (default is 3).
'system_platform_certificate': # Dictionary containing data for customize the platform certificates (DNS, expiration, SANs). Supported fields:
  dns_domain             # e.g. <lab domain name>.<domain>.com
  duration               # Amount of time from emission to expiration date - e.g. '2160h'
  renewBefore            # Amount of time to renew the certificate before expiration date - e.g. '360h'
                         # 'subject_' fields override common Relative Distinguished Names (RDNs) to be included in the certs.
  subject_C              # Country
  subject_ST             # State or Province
  subject_L              # Location
  subject_O              # Organization
  subject_OU             # Organizational Unit
  subject_CN             # CommonName

Note

The system-local-ca TLS certs and key are shared between SystemController and subclouds in DC systems. Considering this, the overrides for the RCA/ICA certs and key are not applicable to subclouds, but the leaf certificates can still be configured with the override system_platform_certificate in separate ways.

The data provided through system_local_ca_key has to contain a RSA private key, in unencrypted PEM format.

For more info about the overrides, look into the inventory parameters described in Update system-local-ca or Migrate Platform Certificates to use Cert Manager.