Dns problem with kubernetes

I created a Dockerfile to run a minecraft server in a container.
Here is the Dockerfile

FROM eclipse-temurin:21.0.2_13-jre

RUN adduser minecraft
RUN su - minecraft
WORKDIR /home/minecraft
RUN wget https://api.papermc.io/v2/projects/paper/versions/1.8.8/builds/445/downloads/paper-1.8.8-445.jar
RUN echo "eula=true" > eula.txt

COPY ./server.properties ./

EXPOSE 25565

CMD [ "java", "-Xmx2G", "-Xms2G", "-jar", "paper-1.8.8-445.jar", "noguis" ]

It works fine when I run it as a container, but when running it in Kubernetes I get this:

$ kubectl logs minecraft-deployment-6b68cc8695-6qzv4
Downloading vanilla jar...
Failed to download vanilla jar
java.net.UnknownHostException: launcher.mojang.com
        at java.base/sun.nio.ch.NioSocketImpl.connect(Unknown Source)
        at java.base/java.net.SocksSocketImpl.connect(Unknown Source)
        at java.base/java.net.Socket.connect(Unknown Source)
        at java.base/sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
        at java.base/sun.security.ssl.BaseSSLSocketImpl.connect(Unknown Source)
        at java.base/sun.net.NetworkClient.doConnect(Unknown Source)
        at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source)
        at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source)
        at java.base/sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
        at java.base/sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
        at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
        at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
        at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
        at java.base/java.net.URL.openStream(Unknown Source)
        at io.papermc.paperclip.Paperclip.checkVanillaJar(Paperclip.java:191)
        at io.papermc.paperclip.Paperclip.checkPaperJar(Paperclip.java:122)
        at io.papermc.paperclip.Paperclip.setupEnv(Paperclip.java:95)
        at io.papermc.paperclip.Paperclip.main(Paperclip.java:49)

By the way, Iā€™m creating them from a js script. The .yaml files are defined as json objects.
The deployment yaml

{
        apiVersion: 'apps/v1',
        kind: 'Deployment',
        metadata: {
            name: 'minecraft-deployment',
        },
        spec: {
            replicas: 1,
            selector: {
                matchLabels: {
                    app: 'game-server',
                },
            },
            template: {
                metadata: {
                    labels: {
                        app: 'game-server',
                        game: 'minecraft'
                    },
                },
                spec: {
                    containers: [
                        {
                            name: 'minecraft',
                            image: 'minecraft',
                            imagePullPolicy: 'Never'
                        },
                    ],
                },
            },
        },
    }

The service .yaml

{
        kind: "Service",
        apiVersion: "v1",
        metadata: {
            name: "minecraft-service",
        },
        spec: {
            selector: {
                app: "minecraft",
            },
            ports: [{
                protocol: "TCP",
                port: 25565,
                targetPort: 25565,
            }],
            type: "LoadBalancer"
        }
    }

And, I donā€™t know if it matters, but here is how I create them:

const createService = await k8sApi.createNamespacedService('default', service)
const createDeployment = await k8sAppsApi.createNamespacedDeployment('default', deployment)

Can someone help me figure this out?
Thanks in advanced
Iā€™m using windows 11, Docker Desktop 4.29.0 (145265) and Kubernetes v1.29.2

The logs from the dns pod

$ kubectl logs --namespace=kube-system coredns-76f75df574-nn8bf
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size
[ERROR] plugin/errors: 2 launcher.mojang.com. AAAA: dns: overflow unpacking uint16
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size
[ERROR] plugin/errors: 2 launcher.mojang.com. AAAA: dns: overflow unpacking uint16
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size
[ERROR] plugin/errors: 2 launcher.mojang.com. AAAA: dns: overflow unpacking uint16
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size
[ERROR] plugin/errors: 2 launcher.mojang.com. AAAA: dns: overflow unpacking uint16
[ERROR] plugin/errors: 2 launcher.mojang.com. AAAA: dns: overflow unpacking uint16
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size
[ERROR] plugin/errors: 2 launcher.mojang.com. AAAA: dns: overflow unpacking uint16
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size
[ERROR] plugin/errors: 2 launcher.mojang.com. AAAA: dns: overflow unpacking uint16
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size
[ERROR] plugin/errors: 2 launcher.mojang.com. AAAA: dns: overflow unpacking uint16
[ERROR] plugin/errors: 2 launcher.mojang.com. AAAA: dns: overflow unpacking uint16
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size
[ERROR] plugin/errors: 2 launcher.mojang.com. AAAA: dns: overflow unpacking uint16
[ERROR] plugin/errors: 2 launcher.mojang.com. A: dns: overflowing header size

So it is more like a Kubernetes issue than Docker.

Did you search for this error message on Google? There are several similar error reports related to Kubernetes and CoreDNS. I never had this issue, and the reports are mostly old, those indicate the root cause is in the upstream DNS (to which coredns forwards requests in your network). Since a simple Docker container without Kubernetes does not have CoreDNS, either Docker containers use a different DNS server or the header size could be ignored which coredns doesnā€™t do.

2 Likes

I fixed it. Appartently is a current bug in coredns CoreDNS 1.10.1 Return SERVFAIL Error with "dns: overflow unpacking uint16" when Upstream DNS response is more than 512 bytes Ā· Issue #5998 Ā· coredns/coredns Ā· GitHub
I fixed it by downgrade the version of CoreDNS to 1.10.0
You can do it running:
kubectl -n kube-system edit deploy coredns
Scroll down and change the version:

- args:
        - -conf
        - /etc/coredns/Corefile
        image: registry.k8s.io/coredns/coredns:v1.10.0

Then, restart CoreDNS:
kubectl rollout restart -n kube-system deployment/coredns

1 Like