Why is my Ingress in a warning state?
When you look at the status of your Ingress setup, you see an error message similar to the following example.
ibmcloud ks ingress status --cluster <cluster_name_or_ID>
OK
Ingress Status: warning
Message: One or more routers are unhealthy. See http://ibm.biz/ingress-router-ts
When you describe the default Ingress controller, you see that the Ingress operator is in a degraded state.
oc describe ingresscontroller default -n openshift-ingress-operator
....
Message: One or more other status conditions indicate a degraded state: LoadBalancerReady=False (LoadBalancerPending: The LoadBalancer service is pending)
Reason: DegradedConditions
Status: True
Type: Degraded
By default, IBM Cloud Satellite sets up a default Red Hat OpenShift router in your cluster and exposes this router by using a load balancer service. Because Satellite does not own and control the host infrastructure, no load balancer can be created automatically, leading to the load balancer service to remain in a pending state and the Ingress operator to report a degraded state. However, Ingress functionality to your cluster continues to work.
A degraded Ingress operator can prevent you from installing or updating other Red Hat OpenShift operators in your cluster.
While you can't fix the warning state of your Ingress, you can update the Ingress controller so that it no longer reports a degraded state. You can then install or update other Red Hat OpenShift operators in your cluster.
-
Get the configuration for your existing Ingress controller in your cluster and save this configuration to a YAML file on your local machine.
oc get ingresscontroller default -n openshift-ingress-operator -o yaml > ingress.yaml
-
With your preferred editor, open the file and remove the following blocks:
annotations
creationTimestamp
managedFields
status
finalizers
generation
resourceVersion
selfLink
uid
In addition, change the
endpointPublishingStrategy
toPrivate
instead ofLoadBalancerService
. Your final YAML file looks similar to the following example.apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: defaultCertificate: name: mycluster-97db6e22bd363f060fa80637cd5e2463-0000 endpointPublishingStrategy: type: Private nodePlacement: tolerations: - key: dedicated value: edge
-
Scale down the IngressController operator.
oc scale --replicas=0 deployment/ingress-operator -n openshift-ingress-operator
-
Remove the finalizer from the current default Ingress controller.
oc patch ingresscontroller default -n openshift-ingress-operator -p '{"metadata":{"finalizers":null}}' --type=merge
-
Remove the existing Ingress controller from your cluster.
oc delete ingresscontroller default -n openshift-ingress-operator
-
Re-create the Ingress controller by using the YAML file that you created earlier. Note that you must re-create the Ingress controller before Red Hat OpenShift can automatically re-create the controller with the old configuration.
oc apply -f ingress.yaml
-
Scale up the IngressController operator.
oc scale --replicas=1 deployment/ingress-operator -n openshift-ingress-operator
-
Verify that the Ingress controller is not in a degraded state anymore.
oc describe ingresscontroller default -n openshift-ingress-operator
Example output
... Reason: IngressControllerUnavailable Status: False Type: Available Last Transition Time: 2021-11-04T21:13:37Z Status: False Type: Degraded