Skip to content

External Secrets Operator

Overview

Big Bang deploys the External Secrets Operator (ESO) wrapper into the external-secrets namespace. ESO reconciles its API resources against a configured external provider and writes the resulting Kubernetes Secrets. Consult the upstream API documentation and provider documentation for product behavior and provider-specific configuration.

Big Bang integration

Enable the package through the canonical packages.externalSecrets configuration entry. Legacy aliases are compatibility-only; use .packages for all new configuration. The umbrella owns the package source, release selection, provider identity and credentials, and cross-package dependency ordering; this chart owns the ESO wrapper and its Big Bang integration resources.

The wrapper installs the vendored ESO CRD bundle. It disables the upstream CRD installation by default, so do not manage a competing CRD installation without coordinating the lifecycle and upgrade plan. General ESO options are passed through the upstream parent. Per ADR 10, use the versioned upstream chart values for the complete upstream configuration surface rather than copying nested upstream settings into Big Bang values.

Stores and generated Secrets

The optional clusterSecretStoreConfiguration helper renders ClusterSecretStore resources for the AWS and Vault shapes implemented by this chart. A ClusterSecretStore is cluster-scoped: scope provider access, identity, role, service account, and referenced Secret deliberately. Namespace-scoped SecretStore resources and provider credentials are deployment-owned.

The optional externalSecretsConfiguration helper renders namespaced ExternalSecret resources that reference a ClusterSecretStore. It supports the template’s data and dataFrom mappings. Its default target creationPolicy is Owner; changing target names, mappings, refresh settings, or ownership policies can replace or remove generated Kubernetes Secrets. See the upstream ExternalSecret API before changing those lifecycle settings.

For the package-supported helper inputs and operational boundaries, see the deployment guide, AWS integration guide, and Vault integration guide. Those guides do not grant provider permissions or create credentials: use least-privilege, identity-based access where possible and keep credential material in deployment-managed Secrets.

Network, mesh, and admission

When network policies are enabled, the chart configures controller, webhook, and certificate-controller Kubernetes API access. The webhook’s API-server path is only opened when the upstream webhook is enabled. In an Istio-enabled deployment, the umbrella adds the required webhook Service HTTPS post-renderer when that webhook is enabled.

Provider connectivity is environment-specific. Hardened Istio uses restricted egress, so add only the explicit provider reachability required by the selected provider through the package’s supported network and bb-common.istio.serviceEntries.custom configuration. Do not broadly allow egress to resolve a provider failure. The chart includes a Vault egress rule when the Big Bang Vault package is enabled and labels ESO pods for Vault’s ingress policy; Vault-side authorization and Vault authentication remain owned by the Vault deployment and provider policy.

Granting Egress to Blocked Services

A valid Store configuration and provider credentials do not grant network access. ESO must reach the provider API and any identity endpoints used to obtain credentials, such as the appropriate regional AWS STS endpoint. Check the selected provider, region, endpoint overrides, and identity mechanism rather than allowing every endpoint for that cloud.

In sidecar mode, traffic captured by a proxy with effective REGISTRY_ONLY policy can be denied if its destination is unregistered. The chart exposes bb-common.istio.sidecar.outboundTrafficPolicyMode; a rendered Sidecar does not itself inject a proxy. Check namespace enrollment, actual pod injection, and capture exceptions before attributing a provider error to mesh policy.

Discovering Blocked Hosts

Confirm the intended kubeconfig. Inspect the failing Store/ExternalSecret’s status conditions and controller logs without printing the synchronized Secret or provider credentials. List the controller pods using the default chart label:

kubectl -n external-secrets get pods -l app.kubernetes.io/name=external-secrets --show-labels

Select a controller pod, not the optional webhook or certificate controller, and inspect both regular and init containers:

SOURCE_POD="replace-with-controller-pod-name"
kubectl -n external-secrets get pod "$SOURCE_POD" \
  -o jsonpath='{.spec.containers[*].name}{"\n"}{.spec.initContainers[*].name}{"\n"}'

If it has an istio-proxy, inspect recent proxy logs while ESO retries the failed reconciliation:

kubectl -n external-secrets logs "$SOURCE_POD" -c istio-proxy --since=10m \
  | grep -i 'BlackHoleCluster'

With proxy access logging enabled, BlackHoleCluster entries can help identify unregistered destinations. No match does not prove connectivity. Distinguish DNS, NetworkPolicy, TLS trust, and provider authentication/authorization errors. In ambient mode, use the relevant ztunnel/waypoint path instead of assuming an application-pod proxy; see the umbrella’s ambient guidance. Redact sensitive request metadata before sharing logs.

Registering External Destinations

These umbrella values register a single HTTPS provider endpoint using the supported custom ServiceEntry interface. Replace the example host with the actual provider API host; add separately reviewed identity endpoints if needed:

packageConfiguration:
  version: v1
packages:
  externalSecrets:
    values:
      bb-common:
        istio:
          enabled: true
          serviceEntries:
            custom:
              - name: provider-api
                spec:
                  hosts:
                    - secrets.example.com
                  exportTo: ["."]
                  location: MESH_EXTERNAL
                  resolution: DNS
                  ports:
                    - number: 443
                      name: https
                      protocol: TLS

When upgrading to this package version, move Big Bang overrides for this package’s istio, networkPolicies, and routes under values.bb-common. In Big Bang values, use packages.externalSecrets.values.bb-common.istio, packages.externalSecrets.values.bb-common.networkPolicies, and packages.externalSecrets.values.bb-common.routes; direct chart values use bb-common.<key> (for example, bb-common.istio). The mesh and its APIs must already be available; bb-common.istio.enabled does not enable injection. The custom array replaces existing entries, so retain any that are still required. Do not use the old istioGateway example for ESO connectivity.

ServiceEntries register destinations; they do not grant NetworkPolicy access or provider permissions. Review bb-common.networkPolicies.egress.definitions and the controller’s bb-common.networkPolicies.egress.from.external-secrets references. The default secrets-api-subnets definition permits a broad TCP 443 range; review and narrow it for your provider’s actual network path rather than adding another broad exception. Account for endpoint IP changes and DNS access. Commit reviewed changes through GitOps, then verify Store readiness and a synthetic secret sync without displaying the target Secret contents.

Consult the bundled bb-common 1.6.1 Istio and NetworkPolicy guides; match the version to Chart.yaml. Do not switch to ALLOW_ANY as a routine fix.

Monitoring and operations

The upstream ServiceMonitor is optional and requires both upstream.serviceMonitor.enabled and the monitoring API to be available. When the umbrella monitoring package is enabled, it orders monitoring before this release. Use ESO status conditions and the upstream metrics documentation to investigate Store and ExternalSecret reconciliation; provider reachability and credentials require environment-specific validation.

The package’s Helm test fixtures validate a synthetic secret sync only. They do not validate cloud or Vault identity, provider permissions, webhook admission, or secret rotation in a deployment. Test those paths with non-production data and targets before relying on a provider configuration.