This article explains an issue where the cert-manager package reconciliation fails in Tanzu Kubernetes Grid Service (vSphere with Tanzu) environments that use a Harbor registry as the package repository.
Administrators may observe that the cert-manager deployment fails due to an ImagePull error and unknown blob messages when fetching package images from Harbor.
This issue typically occurs when the Harbor repository reference used by the Tanzu package repository is invalid or no longer exists, even though the image name still appears in the Harbor UI.
Observed Behavior: The kubectl get apps -A command shows the following for affected packages:
NAMESPACE NAME DESCRIPTION
cert-manager-ns cert-manager Reconcile failed: Deploying: Error (see .status.usefulErrorMessage for details)
The kubectl get pod -A | grep cert output indicates:
NAMESPACE NAME STATUS
cert-manager-ns cert-manager-<hash> 0/1 ImagePullBackOff
cert-manager-ns cert-manager-cainjector-<hash> 0/1 ImagePullBackOff
cert-manager-ns cert-manager-webhook-<hash> 0/1 ImagePullBackOff
from kubectl describe apps:
fail: reconcile deployment/cert-manager (apps/v1) namespace: cert-manager-ns
^ Deployment is not progressing: ProgressDeadlineExceeded, message: ReplicaSet "cert-manager-<hash>" has timed out progressing.
Fetch:
Exit Code: 0
Stdout: apiVersion: vendir.k14s.io/v1alpha1
directories:
- contents:
- imgpkgBundle:
image: <internal-harbor-registry>/vks3.3.1/tanzu-packages/packages/standard/repo@sha256:<hash>
path: .
path: "0"
kind: LockConfig
Friendly Description: Reconcile failed: Deploying: Error (see .status.usefulErrorMessage for details)
Useful Error Message: kapp: Error: waiting on reconcile deployment/cert-manager (apps/v1) namespace: cert-manager-ns:
Finished waiting unsuccessfully:
Deployment is not progressing:
ProgressDeadlineExceeded, message:
ReplicaSet "cert-manager-<hash>" has timed out progressing.
Events: <none>
Pod Describe Output:
QoS Class: BestEffort
Node-Selectors: kubernetes.io/os=linux
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal BackOff 116s (x14851 over 2d8h) kubelet Back-off pulling image "<internal-harbor-registry>/vks3.3.1/tanzu-packages/packages/standard/repo@sha256:<hash>"
Warning Failed 116s (x14851 over 2d8h) kubelet Error: ImagePullBackOff
Manual Image Pull Attempt: A manual attempt to pull the image from a bootstrap machine resulted in:
$ docker pull <internal-harbor-registry>/vks3.3.1/tanzu-packages/packages/standard/repo@sha256:<hash>
<internal-harbor-registry>/vks3.3.1/tanzu-packages/packages/standard/repo@sha256:<hash>: Pulling from vks3.3.1/tanzu-packages/packages/standard/repo
<layer-hash>: Pull complete
<layer-hash>: Pull complete
...
unknown blob
This issue occurs when the Tanzu package repository is pointing to a Harbor repository path that no longer exists or is misconfigured.
Although the image may still appear under the Harbor project, its associated content blobs are missing or inaccessible. As a result, image pulls fail with an “unknown blob” error.
Typical scenarios that can cause this include:
To resolve this issue, update the Tanzu package repository to point to a valid Harbor repository and reinstall the cert-manager package.
tanzu package repository list -A
Update the repository to the correct Harbor path that contains valid images.
tanzu package repository update standard-repo \--url ####.####.####. /####/####/#####/ \-n #####
tanzu package installed delete cert-manager --namespace #####
tanzu package install cert-manager \-p cert-manager.kubernetes.vmware.com \--namespace ##### \--version #.##.#+vmware.1-vks.1
Run the following command to ensure the package installation is successful:
tanzu package installed list -A
The status should show “Reconcile succeeded” for the cert-manager package.