Adding API server certificates
The default API server certificate is issued by an internal OpenShift Container Platform cluster CA. Clients outside the cluster will not be able to verify the API server's certificate by default. This certificate can be replaced by one that is issued by a CA that clients trust.
Add an API server named certificate
1. Login to the cluster
Login to your ARO cluster using the oc CLI with appropriate credentials.
2. Create secret
Create a TLS secret in the openshift-config namespace with your certificate and key:
oc create secret tls aro-prd-we.example.com \
--cert="aro-prd-we.pem" \
--key="aro-prd-we.key" \
-n openshift-configNote: Replace aro-prd-we.example.com with your actual API server domain name, and use your actual certificate and key file names.
3. Update API server to reference secret
Update the API server configuration to use the new certificate:
oc patch apiserver cluster --type=merge -p \
'{"spec":{"servingCerts": {"namedCertificates": [{"names": ["api.aro-prd-we.example.com"], "servingCertificate": {"name": "aro-prd-we.example.com"}}]}}}'oc patch apiserver cluster --type=merge -p '{\"spec\":{\"servingCerts\": {\"namedCertificates\": [{\"names\": [\"api.aro-prd-we.example.com\"], \"servingCertificate\": {\"name\": \"aro-prd-we.example.com\"}}]}}}'You might need to restart the kube-apiserver pods to apply the changes:
oc rollout restart deployment/apiserver -n openshift-apiserverVerify the certificate is correctly presented using OpenSSL:
echo QUIT | openssl s_client -connect api.aro-prd-we.example.com:6443 | \
openssl x509 -noout -subject -issuer -startdate -enddate -fingerprint4. Confirm reference
Verify the API server configuration and wait for the changes to be applied:
oc get apiserver cluster -o yaml
oc get clusteroperators kube-apiserverWARNING
Do not continue to the next step until PROGRESSING is listed as False in the kube-apiserver cluster operator status.
5. Debug the connection
If you encounter issues, use these commands to debug the certificate setup:
Check the TLS connection:
openssl s_client -connect api.aro-prd-we.example.com:6443 -CAfile root-ca.pemVerify certificate details:
openssl x509 -in aro-prd-we.pem -text -nooutTest oc login with custom CA:
oc login https://api.aro-prd-we.example.com:6443 \
-u kubeadmin \
-p <password> \
--certificate-authority=/path/to/ca-bundle.crt \
--loglevel=10Test OAuth endpoint:
curl -v https://oauth-openshift.apps.aro-prd-we.example.com/oauth/authorize \
--cacert /path/to/ca-bundle.crtAdditional debugging commands:
# Check authentication secrets
kubectl get secret -n openshift-authentication
# Check OAuth deployment status
oc rollout status deployment.apps/oauth-openshift -n openshift-authentication
# View certificate chain
openssl s_client -connect api.aro-prd-we.example.com:6443 -showcerts
# Extract and view authentication certificates
oc get secret v4-0-config-system-serving-cert -n openshift-authentication \
-o jsonpath="{.data['tls\.crt']}" | base64 --decode
oc get secret v4-0-config-system-serving-cert -n openshift-authentication \
-o jsonpath="{.data['tls\.key']}" | base64 --decode