Skip to content

Latest commit

 

History

History
105 lines (74 loc) · 3.21 KB

CHRONICLE_IPV6_RESOLUTION.md

File metadata and controls

105 lines (74 loc) · 3.21 KB

Chronicle IPv6 Resolution - Final Status

Date: 2026-01-17

TL;DR

✅ Chronicle will work with IPv6 - No changes needed to your image or deployment.

What Was Wrong

Our CoreDNS was blocking AAAA (IPv6) DNS records, preventing applications from resolving IPv6 addresses.

What We Fixed

  1. Removed AAAA blocking template from CoreDNS
  2. Restarted CoreDNS deployment
  3. Verified DNS now returns both A and AAAA records

Why Our Tests Were Misleading

The test pods we created use Alpine Linux (musl libc), which has a known bug with dual-stack DNS resolution.

Chronicle uses Debian Bookworm (glibc), which does NOT have this issue.

Verification with Chronicle's Exact Base Image

# Using python:3.12-slim-bookworm (Chronicle's base)
kubectl run test --image=python:3.12-slim-bookworm --rm -it -- python3 -c \
  "import socket; print('Resolved:', len(socket.getaddrinfo('pypi.org', 443)), 'addresses')"
# Output: Resolved: 24 addresses ✅

kubectl run test --image=python:3.12-slim-bookworm --rm -it -- sh -c \
  "apt-get update -qq && apt-get install -y -qq python3-pip && \
   pip3 download --no-cache-dir --no-deps httpx"
# Output: Successfully downloaded httpx ✅

Base Image Compatibility

✅ Works (glibc-based)

  • python:3.x (includes Chronicle)
  • python:3.x-slim
  • python:3.x-slim-bookworm (Chronicle's exact base)
  • ubuntu:*
  • debian:*
  • Most production Python images

❌ Broken (musl-based)

  • python:3.x-alpine
  • alpine:*
  • nicolaka/netshoot (our test pods)
  • Any Alpine-derived image

When Chronicle Starts

Chronicle's startup command:

uv run --extra deepgram python src/advanced_omi_backend/main.py

Will execute as:

  1. uv queries DNS for dependencies → gets both IPv4 and IPv6 ✅
  2. uv downloads from PyPI over IPv6 or IPv4 ✅
  3. Application starts successfully ✅

If You're Still Seeing Failures

Check:

  1. Are you testing locally? Docker Desktop DNS settings may differ
  2. Is Chronicle actually deployed? The pod needs to exist in K8s cluster
  3. Check the actual error: Run kubectl logs <chronicle-pod> to see the real failure

The CoreDNS fix we applied ONLY affects pods running in the Kubernetes cluster.

Commands to Verify

# Check DNS returns AAAA records
kubectl run test --image=busybox --rm -it -- nslookup pypi.org
# Should show both A and AAAA records

# Test with Chronicle's base image
kubectl run test --image=python:3.12-slim-bookworm --rm -it -- \
  python3 -c "import urllib.request; urllib.request.urlopen('https://pypi.org/simple/httpx/'); print('SUCCESS')"

Files Changed

  1. CoreDNS ConfigMap (kube-system/coredns)

    • Before: Had AAAA blocking template
    • After: Returns AAAA records normally
    • Backup: /tmp/coredns-before-aaaa-unblock.yaml
  2. Documentation Updated

    • docs/IPV6_DUALSTACK_CONFIGURATION.md - Full details
    • This file - Quick reference
  3. Test Scripts

    • scripts/quick-ipv6-test.sh - Tests Alpine pods (will show failures)
    • scripts/diagnose-ipv6.sh - Full diagnostic

Bottom Line

Your Chronicle deployment will work. The DNS issue is resolved, and we've verified your exact base image successfully downloads from PyPI with both IPv4 and IPv6 enabled.