Beta This is a new service — your feedback will help us to improve it.

Troubleshooting

Start on the container detail page. It shows the status, pod state, restart count, recent logs, and the assigned IPv6 address when one exists.

Container is pending or provisioning

Provisioning waits for Kubernetes resources and an IPv6 LoadBalancer address.

If it stays pending for more than a few minutes:

Image pull errors

Common causes:

Use a fully qualified public image reference when in doubt:

docker.io/library/nginx:1.25-alpine

Private registry credentials are not supported in simple mode yet.

Container starts and then fails

Open the container detail page and read Pod state and Logs.

Common causes:

Fix the image or config, then use Save & restart or Restart container.

Changes are saved but not live

Editing a container saves desired config first. The running pod changes only after a restart.

Use Save & restart on the edit screen, or use Restart container from the detail page.

DNS does not resolve

Check the AAAA record:

dig AAAA app.example.com

Make sure the record value exactly matches the IPv6 address on the container detail page. If you deleted, recreated, or renamed the container, the address may have changed.

DNS resolves but the service is unreachable

Check IPv6 from your client:

curl -6 https://test-ipv6.com/

Then test the service directly:

curl -6 http://[2a01:4f8:c2c:1234::5]/

If the raw IPv6 address works but the hostname does not, the issue is DNS. If neither works, check the container status and logs.

kubectl LoadBalancer has an EXTERNAL-IP but connection is refused

Symptoms: kubectl get svc shows an EXTERNAL-IP, but curl -6 http://[<EXTERNAL-IP>]/ is refused and a Cloudflare-proxied AAAA returns 523 (origin unreachable), while in-cluster checks (kubectl exec) succeed.

This means the platform ingress policy for your LoadBalancer Service has not been applied yet. DollarBox reconciles an allow-lb-<service> NetworkPolicy for each tenant LoadBalancer automatically, on a sweep that runs every five minutes — so wait that long after kubectl apply before assuming something is wrong. Things to check:

If it is still refused well after five minutes, and the pod itself answers over kubectl exec, that is worth reporting.

kubectl rejects my LoadBalancer Service

Every tenant LoadBalancer must ask for one of your organisation's reserved IPv6 addresses by annotation. Admission control rejects the Service outright otherwise:

LoadBalancer Services must request an address from your reserved IPv6 allocation
via the metallb.io/loadBalancerIPs annotation.

or, if you asked for an address that is not yours:

Requested LoadBalancer address is not in your reserved IPv6 allocation.

The annotation is metallb.io/loadBalancerIPs. List your reserved addresses from the Reserved IPv6 addresses card on the kubectl page, or from the ConfigMap the platform keeps in your namespace:

kubectl get configmap container-reserved-ipv6 -o jsonpath='{.data.addresses}'
apiVersion: v1
kind: Service
metadata:
  name: web
  annotations:
    metallb.io/loadBalancerIPs: 2a01:4f8:fff0:18b:1000::1
spec:
  type: LoadBalancer
  ipFamilies: [IPv6]
  ipFamilyPolicy: SingleStack
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 8080

spec.externalIPs and the deprecated spec.loadBalancerIP are both rejected on tenant Services and cannot be used instead. See kubectl mode.

kubectl apply is rejected

Admission policy rejects resources that break tenant guardrails. Common rejections include:

Adjust the manifest or use the control panel for control-panel-managed containers.

Quota is exhausted

Billing capacity and namespace quota are linked. To clear quota pressure: