Chapter 9. Configuring an Ingress Controller for manual DNS Management
Chapter 9. Configuring an Ingress Controller for manual DNS Management As a cluster administrator, when you create an Ingress Controller, the Operator manages the DNS records automatically. This has some limitations when the required DNS zone is different from the cluster DNS zone or when the DNS zone is hosted outside the cloud provider. As a cluster administrator, you can configure an Ingress Controller to stop automatic DNS management and start manual DNS management. Set dnsManagementPolicy to specify when it should be automatically or manually managed. When you change an Ingress Controller from Managed to Unmanaged DNS management policy, the Operator does not clean up the wildcard DNS record provisioned on the cloud. When you change an Ingress Controller from Unmanaged to Managed DNS management policy, the Operator attempts to create the DNS record on the cloud provider if it does not exist or updates the DNS record if it already exists. Important When you set dnsManagementPolicy to unmanaged , you have to manually manage the lifecycle of the wildcard DNS record on the cloud provider. 9.1. Managed DNS management policy The Managed DNS management policy for Ingress Controllers ensures that the lifecycle of the wildcard DNS record on the cloud provider is automatically managed by the Operator. 9.2. Unmanaged DNS management policy The Unmanaged DNS management policy for Ingress Controllers ensures that the lifecycle of the wildcard DNS record on the cloud provider is not automatically managed, instead it becomes the responsibility of the cluster administrator. Note On the AWS cloud platform, if the domain on the Ingress Controller does not match with dnsConfig.Spec.BaseDomain then the DNS management policy is automatically set to Unmanaged . 9.3. Creating a custom Ingress Controller with the Unmanaged DNS management policy As a cluster administrator, you can create a new custom Ingress Controller with the Unmanaged DNS management policy. Prerequisites Install the OpenShift CLI ( oc ). Log in as a user with cluster-admin privileges. Procedure Create a custom resource (CR) file named sample-ingress.yaml containing the following: apiVersion: operator.openshift.io/v1 kind: IngressController metadata: namespace: openshift-ingress-operator name: <name> 1 spec: domain: <domain> 2 endpointPublishingStrategy: type: LoadBalancerService loadBalancer: scope: External 3 dnsManagementPolicy: Unmanaged 4 1 Specify the <name> with a name for the IngressController object. 2 Specify the domain based on the DNS record that was created as a prerequisite. 3 Specify the scope as External to expose the load balancer externally. 4 dnsManagementPolicy indicates if the Ingress Controller is managing the lifecycle of the wildcard DNS record associated with the load balancer. The valid values are Managed and Unmanaged . The default value is Managed . Save the file to apply the changes. oc apply -f <name>.yaml 1 9.4. Modifying an existing Ingress Controller As a cluster administrator, you can modify an existing Ingress Controller to manually manage the DNS record lifecycle. Prerequisites Install the OpenShift CLI ( oc ). Log in as a user with cluster-admin privileges. Procedure Modify the chosen IngressController to set dnsManagementPolicy : SCOPE=USD(oc -n openshift-ingress-operator get ingresscontroller <name> -o=jsonpath="{.status.endpointPublishingStrategy.loadBalancer.scope}") oc -n openshift-ingress-operator patch ingresscontrollers/<name> --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"dnsManagementPolicy":"Unmanaged", "scope":"USD{SCOPE}"}}}}' Optional: You can delete the associated DNS record in the cloud provider. 9.5. Additional resources Ingress Controller configuration parameters
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: namespace: openshift-ingress-operator name: <name> 1 spec: domain: <domain> 2 endpointPublishingStrategy: type: LoadBalancerService loadBalancer: scope: External 3 dnsManagementPolicy: Unmanaged 4 apply -f <name>.yaml 1 SCOPE=USD(oc -n openshift-ingress-operator get ingresscontroller <name> -o=jsonpath="{.status.endpointPublishingStrategy.loadBalancer.scope}") -n openshift-ingress-operator patch ingresscontrollers/<name> --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"dnsManagementPolicy":"Unmanaged", "scope":"USD{SCOPE}"}}}}'