Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions enhancements/baremetal/bootstrap-external-ip.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
---
title: bootstrap-external-ip
authors:
- "@honza"
reviewers:
- "@hardys"
- "@dtantsur"
- "@dhellmann"
- "@patrickdillon"
approvers:
- "@hardys"
- "@dtantsur"
- "@dhellmann"
- "@patrickdillon"
api-approvers:
- None
creation-date: 2022-03-23
last-updated: 2022-03-23
tracking-link:
- https://issues.redhat.com/browse/METAL-175
see-also:
- https://bugzilla.redhat.com/show_bug.cgi?id=2048600#c1
replaces:
superseded-by:
---

# Bootstrap External IP

## Summary

When installing a bare metal IPI cluster, you can use the `networkConfig` field
in the `install-config.yaml` file to configure the control plane network
interfaces for the cluster hosts. However, currently, you cannot configure the
bootstrap VM networking using the same means.

## Motivation

In environments where no DHCP server is running, the bootstrap VM will not get
an IP address on the control plane NIC causing cluster installation to fail.
The user can work around this by modifying the bootstrap ignition file; however,
this isn't a friendly experience.

### User Stories

- As a user, I want to be able to deploy an IPI bare metal cluster in an
environment where no DHCP cluster is running
- As a user, I want to specify a static IP address for the bootstrap VM

### Goals

- Support cluster installation in environments without a running DHCP server
- Improve the level of customization of bootstrap VM networking
- Improve user-friendliness when specifying a static IP for the bootstrap VM

### Non-Goals

- Provide means for configuring every aspect of bootstrap networking

## Proposal

We will add two new fields, `bootstrapExternalStaticIP` and
`bootstrapExternalStaticGateway`, to allow for further customization of
bootstrap networking. We will use these fields to generate static configuration
in the installer.

### Workflow Description

The **cluster creator** will modify the `install-config.yaml` to configure
static networking for the bootstrap node.

### API Extensions

We will add two new fields to the baremetal platform section of the
`install-config.yaml` file called `bootstrapExternalStaticIP`, and
`bootstrapExternalStaticGateway`. This is similar to the existing
`bootstrapProvisioningIP` field.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to add additional validations for this new field? If so, what would they be?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think just verifying it's in the correct IP format should be fine.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should validate similar to other fields e.g

  • IP syntax is valid
  • IP is in the MachineNetwork
  • IP doesn't conflict with other IPs (e.g API/Ingress VIP IPs)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I was wondering if there is some correlation with the networkConfig field. Since nothing is mentioned in the doc about it, I am assuming that they can occur independently. We could configure bootstrapExternalStaticIP, and
bootstrapExternalGateway irrespective of whether the networkConfig field is used to configure StaticIPs on hosts within the cluster.


### Risks and Mitigations

### Drawbacks

Adding more and more fields to the already busy `install-config.yaml` can be
considered less than ideal.

## Design Details

### Test Plan

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should follow up and add CI coverage for static IP deployments, I know @derekhiggins was working on that but I'm not sure of the latest status

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I stopped rebasing my PR when I saw had pushed a new version of his PR, @imain are you still working on it or will I rebase mine ? openshift-metal3/dev-scripts#1297

There is work in progress to add end-to-end tests to exercise the static IP
scenario.

### Graduation Criteria

#### Dev Preview -> Tech Preview

- Ability to utilize the enhancement end to end
- End user documentation, relative API stability
- Sufficient test coverage
- Gather feedback from users rather than just developers
- Enumerate service level indicators (SLIs), expose SLIs as metrics
- Write symptoms-based alerts for the component(s)

#### Tech Preview -> GA

- More testing (upgrade, downgrade, scale)
- Sufficient time for feedback
- Available by default
- Backhaul SLI telemetry
- Document SLOs for the component
- Conduct load testing
- User facing documentation created in [openshift-docs](https://github.com/openshift/openshift-docs/)

**For non-optional features moving to GA, the graduation criteria must include
end to end tests.**

#### Removing a deprecated feature

### Upgrade / Downgrade Strategy

### Version Skew Strategy

### Operational Aspects of API Extensions

#### Failure Modes

#### Support Procedures

## Implementation History

N/A

## Alternatives

We can document the specific scenario, and offer the ignition-based workaround
as a possible solution.