Skip to content

Commit 343e0dc

Browse files
authored
Merge pull request #104156 from dfitzmau/OSDOCS-16862
OSDOCS-16862: CQA2.0 of CORE-3: Ingress Controllers and Load Balancin…
2 parents fca8f9d + 9f47710 commit 343e0dc

38 files changed

Lines changed: 329 additions & 314 deletions

File tree

_topic_maps/_topic_map.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1692,7 +1692,7 @@ Topics:
16921692
File: overview-traffic
16931693
- Name: Configuring ExternalIPs for services
16941694
File: configuring-externalip
1695-
- Name: Configuring ingress cluster traffic using an Ingress Controller
1695+
- Name: Configuring ingress cluster traffic by using an Ingress Controller
16961696
File: configuring-ingress-cluster-traffic-ingress-controller
16971697
- Name: Configuring the Ingress Controller endpoint publishing strategy
16981698
File: nw-configuring-ingress-controller-endpoint-publishing-strategy

modules/configuration-externalip.adoc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
[id="configuration-externalip_{context}"]
77
= Configuration for ExternalIP
88

9-
The following parameters in the `Network.config.openshift.io` custom resource (CR) govern the use of an external IP address in {product-title}:
9+
[role="_abstract"]
10+
You can set parameters in the `Network.config.openshift.io` custom resource (CR) to govern the use of an external IP address in {product-title}.
11+
12+
The following list details these parameters:
1013

1114
* `spec.externalIP.autoAssignCIDRs` defines an IP address block used by the load balancer when choosing an external IP address for the service. {product-title} supports only a single IP address block for automatic assignment. This configuration requires less steps than manually assigning ExternalIPs to services, which requires managing the port space of a limited number of shared IP addresses. If you enable automatic assignment, the Cloud Controller Manager Operator allocates an external IP address to a `Service` object with `spec.type=LoadBalancer` defind in its configuration.
1215

modules/example-policy-objects.adoc

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
[id="example-policy-objects_{context}"]
77
= Example policy objects
88

9-
The examples in this section show different `spec.externalIP.policy` configurations.
9+
[role="_abstract"]
10+
Reference the examples in the `Example policy objects` section to understand different `spec.externalIP.policy` configurations.
11+
12+
In the following example, the policy prevents {product-title} from creating any service with a specified external IP address.
1013

11-
- In the following example, the policy prevents {product-title} from creating any service with a specified external IP address.
12-
+
1314
.Example policy to reject any value specified for `Service` object `spec.externalIPs[]`
1415
[source,yaml]
1516
----
@@ -23,8 +24,8 @@ spec:
2324
# ...
2425
----
2526

26-
- In the following example, both the `allowedCIDRs` and `rejectedCIDRs` fields are set.
27-
+
27+
In the following example, both the `allowedCIDRs` and `rejectedCIDRs` fields are set.
28+
2829
.Example policy that includes both allowed and rejected CIDR blocks
2930
[source,yaml]
3031
----
@@ -42,8 +43,8 @@ spec:
4243
# ...
4344
----
4445

45-
- In the following example, `policy` is set to `{}`. With this configuration, using the `oc get networks.config.openshift.io -o yaml` command to view the configuration means `policy` parameter does not show on the command output. The same behavior exists for `policy: null`.
46-
+
46+
In the following example, `policy` is set to `{}`. With this configuration, using the `oc get networks.config.openshift.io -o yaml` command to view the configuration means `policy` parameter does not show on the command output. The same behavior exists for `policy: null`.
47+
4748
.Example policy to allow any value specified for `Service` object `spec.externalIPs[]`
4849
[source,yaml]
4950
----

modules/nw-allocate-load-balancers-to-subnets-procedure.adoc

Lines changed: 54 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -6,119 +6,106 @@
66
[id="nw-allocating-load-balancers-to-subnets-procedure_{context}"]
77
= Specifying AWS subnets for OpenShift API and ingress load balancers at installation
88

9-
Perform the following steps to allocate API and ingress load balancers to specific subnets.
9+
[role="_abstract"]
10+
You can allocate API and ingress load balancers to specific subnets for the purposes of aligning security and networking policies with your organization requirements.
1011

11-
.Prerequisites
12+
When defining entries for control plane load balancers in the `subnets` list, ensure that you adhere to the following pattern:
1213

13-
Before you begin, ensure you have:
14+
[source,yaml]
15+
----
16+
# ... (within platform.aws.vpc.subnets list)
17+
- id: subnet-0fcf8e0392f0910d6 # Public Subnet for External API LB
18+
roles:
19+
- type: ControlPlaneExternalLB
20+
- id: subnet-0fcf8e0392f0910d7 # Private Subnet for Internal API LB
21+
roles:
22+
- type: ControlPlaneInternalLB
23+
# ...
24+
----
1425

15-
* An existing AWS virtual private cloud (VPC).
26+
For the default public Ingress Controller, any subnet assigned the `IngressControllerLB` role in your `install-config.yaml` file must be a public subnet. For example, the subnet must have a route table entry in AWS that directs outbound traffic to an internet gateway (IGW). Ensure you list all necessary subnets, public and private across the AZs, and assign them appropriate roles according to your cluster architecture.
1627

17-
* Pre-configured AWS subnets intended for use by the OpenShift cluster, with the following considerations:
28+
Subnet IDs define the subnets in an existing VPC and can optionally specify their intended roles. If no roles are specified on any subnet, the subnet roles are decided automatically. In this case, the VPC must not contain any other non-cluster subnets without the `kubernetes.io/cluster/<cluster-id>` tag.
1829

19-
** You have a list of their subnet IDs (for example, `subnet-0123456789abcdef0`). These IDs will be used in the `install-config.yaml` file.
30+
If roles are specified for subnets, each subnet must have at least one assigned role, and the `ClusterNode`, `BootstrapNode`, `IngressControllerLB`, `ControlPlaneExternalLB`, and `ControlPlaneInternalLB` roles must be assigned to at least one subnet. However, if the cluster scope is internal, `ControlPlaneExternalLB` is not required.
2031

21-
** Use subnets spanning at least two availability zones (AZs) for high availability of load balancers and other critical components, like control planes.
32+
.Prerequisites
2233

34+
* An existing AWS virtual private cloud (VPC).
35+
* Pre-configured AWS subnets intended for use by the {product-title} cluster, with the following considerations:
36+
** You have a list of their subnet IDs (for example, `subnet-0123456789abcdef0`). These IDs will be used in the `install-config.yaml` file.
37+
** Use subnets spanning at least two availability zones (AZs) for high availability of load balancers and other critical components, like control planes.
2338
** You have sufficient available IP addresses within these subnets for all assigned roles.
24-
2539
** The AWS configuration for these subnets, including network ACLs and security groups, must permit necessary traffic for all roles assigned to them. For subnets hosting an ingress controller, this typically includes TCP ports 80 and 443 from required sources.
26-
27-
* You have the OpenShift installer binary for your target OpenShift version.
28-
40+
* You have the {product-title} installation program binary for your target {product-title} version.
2941
* You have an `install-config.yaml` file.
3042
3143
.Procedure
3244

33-
. Prepare the `install-config.yaml` file:
34-
+
35-
If you haven't already, generate the installation configuration file using the OpenShift installer:
45+
. Generate the installation configuration file by using the {product-title} installation program by entering the following command:
3646
+
3747
[source,terminal]
3848
----
3949
$ openshift-install create install-config --dir=<your_installation_directory>
4050
----
41-
+
42-
This command creates the `install-config.yaml` file in the specified directory.
4351

44-
. Define subnets and assign roles:
45-
+
46-
Open the `install-config.yaml` file located in `<your_installation_directory>` using a text editor. You will define your VPC subnets and their designated roles under the `platform.aws.vpc.subnets` field.
47-
+
48-
For each AWS subnet you intend the cluster to use, you will create an entry specifying its `id` and a list of `roles`. Each role is an object with a `type` key. To designate a subnet for the default Ingress Controller, assign it a role with `type: IngressControllerLB`.
52+
. Use a text editor to open the `install-config.yaml` file.
53+
54+
. Define subnets and assign roles. You must define your VPC subnets and their designated roles under the `platform.aws.vpc.subnets` parameter. For each AWS subnet, create an entry by specifying an `id` and a list of `roles`. Each role is an object with a `type` key. To designate a subnet for the default Ingress Controller, assign a role with `type: IngressControllerLB` to the subnet.
4955
+
5056
[source,yaml]
5157
----
5258
apiVersion: v1
53-
baseDomain: example.com <1>
59+
baseDomain: example.com
5460
metadata:
5561
name: my-cluster # Example cluster name
5662
platform:
5763
aws:
58-
region: us-east-1 <2>
59-
vpc: <3>
60-
subnets: <4>
61-
- id: subnet-0fcf8e0392f0910d5 # Public Subnet in AZ us-east-1a <5>
64+
region: us-east-1
65+
vpc:
66+
subnets:
67+
- id: subnet-0fcf8e0392f0910d5 # Public Subnet in AZ us-east-1a
6268
roles:
63-
- type: IngressControllerLB <6>
69+
- type: IngressControllerLB
6470
- type: BootstrapNode
6571
- id: subnet-0xxxxxxxxxxxxxxza # Public Subnet in another AZ for HA
6672
roles:
6773
- type: IngressControllerLB
6874
- id: subnet-0fcf8e0392f0910d4 # Private Subnet in AZ us-east-1a
6975
roles:
70-
- type: ClusterNode <7>
76+
- type: ClusterNode
7177
- id: subnet-0yyyyyyyyyyyyyyzb # Private Subnet in another AZ for HA
7278
roles:
7379
- type: ClusterNode
7480
# Add other subnet IDs and their roles as needed for your cluster architecture
75-
pullSecret: '...' <8>
76-
sshKey: '...' <9>
77-
----
78-
<1> Your base domain.
79-
<2> Your AWS region.
80-
<3> The vpc object under `platform.aws` contains the subnets list.
81-
<4> List of all subnet objects that OpenShift will use. Each object defines a subnet id and its roles.
82-
<5> Replace with your AWS Subnet ID.
83-
<6> The `type: IngressControllerLB` role specifically designates this subnet for the default Ingress Controller's LoadBalancer. In private/internal cluster, the subnet with `IngressControllerLB` role must be private.
84-
<7> The `type: ClusterNode` role designates this subnet for control plane and compute nodes. These are typically private subnets.
85-
<8> Your pull secret.
86-
<9> Your SSH key.
87-
+
88-
Entries for control plane load balancers in the `subnets` list would follow a similar pattern:
89-
+
90-
[source,yaml]
91-
----
92-
# ... (within platform.aws.vpc.subnets list)
93-
- id: subnet-0fcf8e0392f0910d6 # Public Subnet for External API LB
94-
roles:
95-
- type: ControlPlaneExternalLB
96-
- id: subnet-0fcf8e0392f0910d7 # Private Subnet for Internal API LB
97-
roles:
98-
- type: ControlPlaneInternalLB
99-
# ...
81+
pullSecret: '...'
82+
sshKey: '...'
10083
----
10184
+
102-
For the default public Ingress Controller, any subnet assigned the `IngressControllerLB` role in your `install-config.yaml` file must be a public subnet. For example, it must have a route table entry in AWS that directs outbound traffic to an internet gateway (IGW).
85+
where:
10386
+
104-
Ensure you list all necessary subnets, public and private across the AZs, and assign them appropriate roles according to your cluster architecture.
105-
+
106-
Subnet IDs define the subnets in an existing VPC and can optionally specify their intended roles. If no roles are specified on any subnet, the subnet roles are decided automatically. In this case, the VPC must not contain any other non-cluster subnets without the `kubernetes.io/cluster/<cluster-id>` tag.
107-
+
108-
If roles are specified for subnets, each subnet must have at least one assigned role, and the `ClusterNode`, `BootstrapNode`, `IngressControllerLB`, `ControlPlaneExternalLB`, and `ControlPlaneInternalLB` roles must be assigned to at least one subnet. However, if the cluster scope is internal, `ControlPlaneExternalLB` is not required.
109-
110-
. Proceed with the cluster Installation:
111-
+
112-
After saving your changes to the `install-config.yaml` file, create the cluster:
87+
`baseDomain`:: Specifies the base domain.
88+
`region`:: Specifies the AWS region.
89+
`vpc`:: Specifies the VPC object under `platform.aws` contains the subnets list.
90+
`subnets`:: Specifies a list of all subnet objects that OpenShift will use. Each object defines a subnet id and its roles.
91+
`id`:: Specifies the AWS Subnet ID.
92+
`type.IngressControllerLB`:: Specifies the `type: IngressControllerLB` role specifically designates this subnet for the default Ingress Controller's LoadBalancer. In private/internal cluster, the subnet with `IngressControllerLB` role must be private.
93+
`type.ClusterNode`:: Specifies the `type: ClusterNode` role designates this subnet for control plane and compute nodes. These are typically private subnets.
94+
`pullSecret`:: Specifies the pull secret.
95+
`sshKey`:: Specifies the SSH key.
96+
97+
. Save you changes to the `install-config.yaml` file.
98+
99+
. Install the cluster by running the following command:
113100
+
114101
[source,terminal]
115102
----
116103
$ openshift-install create cluster --dir=<your_installation_directory>
117104
----
118105
+
119-
The installation program will now use the subnet definitions and explicit role assignments from the `platform.aws.vpc.subnets` section of your `install-config.yaml` file to provision cluster resources, including placing the Ingress Controller's LoadBalancer in the subnets you designated with the `IngressControllerLB` role.
120-
106+
The installation program uses the subnet definitions and explicit role assignments from the `platform.aws.vpc.subnets` section of your `install-config.yaml` file to provision cluster resources. This includes placing the LoadBalancer of the Ingress Controller in the subnets you designated with the `IngressControllerLB` role.
107+
+
121108
[NOTE]
122109
====
123-
The role assignment mechanism within `platform.aws.vpc.subnets`, such as specifying types like `IngressControllerLB`, `ClusterNode`, `ControlPlaneExternalLB`, `ControlPlaneInternalLB`, `BootstrapNode` is the comprehensive way the OpenShift installer identifies suitable subnets for various cluster services and components.
124-
====
110+
The role assignment mechanism within `platform.aws.vpc.subnets`, such as specifying types like `IngressControllerLB`, `ClusterNode`, `ControlPlaneExternalLB`, `ControlPlaneInternalLB`, `BootstrapNode` is the comprehensive way the installation program identifies suitable subnets for various cluster services and components.
111+
====

modules/nw-allocating-load-balancers-to-subnets.adoc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@
66
[id="nw-allocating-load-balancers-to-subnets_{context}"]
77
= Allocating API and Ingress Load Balancers to Specific Subnets on AWS
88

9-
You can control the network placement of OpenShift Load Balancers on AWS, including those for the Ingress Controller, by explicitly defining your virtual private cloud's (VPC's) subnets and assigning them specific roles directly within the `platform.aws.vpc.subnets` section of the `install-config.yaml` file. This method provides granular control over which subnets are used for resources, such as the Ingress Controller and other cluster components.
9+
[role="_abstract"]
10+
You can control the network placement of {product-title} Load Balancers on {aws-short}, including Load Balancers for the Ingress Controller, by explicitly defining your subnets from the virtual private cloud (VPC). You can then assign the subnets specific roles directly within the `platform.aws.vpc.subnets` section of the `install-config.yaml` file.
11+
12+
By using this method, you have granular control of subnets that are used for resources, such as the Ingress Controller and other cluster components.

modules/nw-aws-nlb-existing-cluster.adoc

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
[id="nw-aws-nlb-existing-cluster_{context}"]
77
= Configuring an Ingress Controller Network Load Balancer on an existing AWS cluster
88

9-
You can create an Ingress Controller backed by an AWS Network Load Balancer (NLB) on an existing cluster.
9+
[role="_abstract"]
10+
To improve performance for high-traffic workloads in {product-title}, configure an Ingress Controller backed by an {aws-full} Network Load Balancer (NLB) on an existing cluster.
11+
12+
You can create an Ingress Controller backed by an {aws-full} Network Load Balancer (NLB) on an existing cluster.
1013

1114
.Prerequisites
1215

13-
* You must have an installed AWS cluster.
14-
* `PlatformStatus` of the infrastructure resource must be AWS.
15-
** To verify that the `PlatformStatus` is AWS, run:
16+
* You installed an {aws-short} cluster.
17+
* `PlatformStatus` of the infrastructure resource must be {aws-short}.
18+
** To verify that the `PlatformStatus` is {aws-short}, run the following command:
1619
+
1720
[source,terminal]
1821
----
@@ -22,8 +25,6 @@ AWS
2225
2326
.Procedure
2427

25-
Create an Ingress Controller backed by an AWS NLB on an existing cluster.
26-
2728
. Create the Ingress Controller manifest:
2829
+
2930
[source,terminal]
@@ -37,26 +38,34 @@ Create an Ingress Controller backed by an AWS NLB on an existing cluster.
3738
apiVersion: operator.openshift.io/v1
3839
kind: IngressController
3940
metadata:
40-
name: $my_ingress_controller<1>
41+
name: <ingress_controller_name>
4142
namespace: openshift-ingress-operator
4243
spec:
43-
domain: $my_unique_ingress_domain<2>
44+
domain: <unique_ingress_domain
4445
endpointPublishingStrategy:
4546
type: LoadBalancerService
4647
loadBalancer:
47-
scope: External<3>
48+
scope: External
4849
providerParameters:
4950
type: AWS
5051
aws:
5152
type: NLB
5253
----
53-
<1> Replace `$my_ingress_controller` with a unique name for the Ingress Controller.
54-
<2> Replace `$my_unique_ingress_domain` with a domain name that is unique among all Ingress Controllers in the cluster. This variable must be a subdomain of the DNS name `<clustername>.<domain>`.
55-
<3> You can replace `External` with `Internal` to use an internal NLB.
54+
+
55+
where:
56+
+
57+
`<ingress_controller_name>`:: Specifies a unique name for the Ingress Controller.
58+
`<unique_ingress_domain>`:: Specifies a domain name that is unique among all Ingress Controllers in the cluster. This variable must be a subdomain of the DNS name `<clustername>.<domain>`.
59+
`scope`:: Specifies the type of NLB, either `External` to use an external NLB or `Internal` to use an internal NLB.
5660
5761
. Create the resource in the cluster:
5862
+
5963
[source,terminal]
6064
----
6165
$ oc create -f ingresscontroller-aws-nlb.yaml
6266
----
67+
+
68+
[IMPORTANT]
69+
====
70+
Before you can configure an Ingress Controller NLB on a new AWS cluster, you must complete the creating the installation configuration file procedure. For more information, see "Creating the installation configuration file".
71+
====

0 commit comments

Comments
 (0)