dockerk3d

Invalid host header when running k3d clusterRun


I am attempting to run a k3d cluster on a linux ubuntu machine using the following config:

{
    "clusterToken": "123123123132",
    "imageVolume": "k3d-tl-images",
    "InitNode": null,
    "kubeAPI": {
        "Binding": {
            "HostIp": "0.0.0.0",
            "HostPort": "43077"
        },
        "host": "0.0.0.0",
        "Port": "6443"
    },
    "kubeconfig": {
        "switchCurrentContext": true,
        "updateDefaultKubeconfig": true
    },
    "name": "tl",
    "network": {
        "id": "123123123123123",
        "ipam": {
            "ipPrefix": "172.19.0.0/16",
            "ipsUsed": [
                "172.19.0.1",
                "172.19.0.3"
            ],
            "Managed": false
        },
        "Members": [
            {
                "IP": "172.19.0.3",
                "Name": "k3d-tl-registry"
            }
        ],
        "name": "k3d-tl"
    },
    "nodes": [
        {
            "agentOpts": {
            },
            "Cmd": [
                "server"
            ],
            "created": "2023-07-16T09:08:47.253631752Z",
            "env": [
                "all_proxy=",
                "ALL_PROXY=",
                "http_proxy=",
                "HTTP_PROXY=",
                "https_proxy=",
                "HTTPS_PROXY=",
                "no_proxy=",
                "NO_PROXY=",
                "K3S_TOKEN=123123123123",
                "K3S_KUBECONFIG_OUTPUT=/output/kubeconfig.yaml"
            ],
            "extraArgs": [
                "--disable=traefik",
                "--tls-san",
                "0.0.0.0"
            ],
            "ExtraHosts": null,
            "GPURequest": "",
            "image": "docker.io/rancher/k3s:v1.21.7-k3s1",
            "IP": {
                "IP": "",
                "Static": false
            },
            "Memory": "",
            "name": "k3d-tl-server-0",
            "Networks": [
                "k3d-tl"
            ],
            "portMappings": {
                "6443": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "43077"
                    }
                ],
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "4589"
                    }
                ]
            },
            "restart": true,
            "role": "server",
            "runtimeLabels": {
                "app": "k3d",
                "k3d.cluster": "tl",
                "k3d.cluster.imageVolume": "k3d-tl-images",
                "k3d.cluster.network": "k3d-tl",
                "k3d.cluster.network.external": "true",
                "k3d.cluster.network.id": "123123123123123",
                "k3d.cluster.network.iprange": "172.19.0.0/16",
                "k3d.cluster.token": "hjeriYqaurJuGhjUxVrg",
                "k3d.cluster.url": "https://k3d-tl-server-0:6443",
                "k3d.role": "server",
                "k3d.server.api.host": "0.0.0.0",
                "k3d.server.api.hostIP": "0.0.0.0",
                "k3d.server.api.port": "43077",
                "k3d.server.loadbalancer": "",
                "k3d.version": "v5-dev"
            },
            "serverOpts": {
                "kubeAPI": {
                    "Binding": {
                        "HostIp": "0.0.0.0",
                        "HostPort": "43077"
                    },
                    "host": "0.0.0.0",
                    "Port": "6443"
                }
            },
            "State": {
                "Running": true,
                "Started": "2023-07-16T09:08:47.969985394Z",
                "Status": ""
            },
            "volumes": [
                "/var/lib/tl/standalone:/var/lib/tl/standalone",
                "/home/tl/tl/data:/home/tl/tl/data",
                "k3d-tl-images:/k3d/images"
            ]
        }
    ],
    "options": {
        "disableLoadbalancer": true,
        "globalEnv": [
            "K3S_TOKEN=123123123"
        ],
        "globalLabels": {
            "app": "k3d",
            "k3d.cluster": "tl",
            "k3d.cluster.imageVolume": "k3d-tl-images",
            "k3d.cluster.network": "k3d-tl",
            "k3d.cluster.network.external": "true",
            "k3d.cluster.network.id": "123123123123",
            "k3d.cluster.network.iprange": "172.19.0.0/16",
            "k3d.cluster.token": "123123123123",
            "k3d.cluster.url": "https://k3d-tl-server-0:6443",
            "k3d.server.loadbalancer": ""
        },
        "nodeHooks": [
            {
                "action": {
                    "Content": "123123123123123123",
                    "Description": "Write LocalRegistryHosting Configmap",
                    "Dest": "/tmp/localRegistryHostingCM.yaml",
                    "Mode": 420,
                    "Runtime": {
                    }
                },
                "stage": "preStart"
            },
            {
                "action": {
                    "Content": "123123123123123123123123",
                    "Description": "Write Registry Configuration",
                    "Dest": "/etc/rancher/k3s/registries.yaml",
                    "Mode": 420,
                    "Runtime": {
                    }
                },
                "stage": "preStart"
            }
        ],
        "registries": {
            "config": {
                "Auths": null,
                "Configs": null,
                "Mirrors": {
                    "docker.elastic.co": {
                        "Endpoints": null,
                        "Rewrites": null
                    },
                    "docker.io": {
                        "Endpoints": null,
                        "Rewrites": null
                    },
                    "gcr.io": {
                        "Endpoints": null,
                        "Rewrites": null
                    },
                    "k8s.gcr.io": {
                        "Endpoints": null,
                        "Rewrites": null
                    },
                    "quay.io": {
                        "Endpoints": null,
                        "Rewrites": null
                    },
                    "us-central1-docker.pkg.dev": {
                        "Endpoints": null,
                        "Rewrites": null
                    }
                }
            },
            "use": [
                {
                    "ClusterRef": "",
                    "expose": {
                        "Binding": {
                            "HostIp": "0.0.0.0",
                            "HostPort": "5699"
                        },
                        "Port": "5000/tcp"
                    },
                    "host": "k3d-tl-registry",
                    "image": "sha256:123123123123123123123",
                    "options": {
                        "proxy": {
                            "remoteURL": ""
                        }
                    }
                }
            ]
        },
        "waitForServer": true
    },
    "volumes": [
        "k3d-tl-images"
    ]
}

And the command (golang):

k3dCluster.ClusterGet(ctx, runtimes.SelectedRuntime, &clusterConfig.Cluster)

Which results in the following error:

Failed Cluster Start: error during post-start cluster preparation: error overwriting contents of /etc/hosts: docker failed to attach to exec process in node 'k3d-tl-server-0': http: invalid Host header

I have tried manually setting permissions for the etc/hosts file, ensuring its valid, updating the http_proxy to be localhost and 127.0.0.1 and so on while always getting the same issue.

I see in the logs that the command docker is attempting to run when it fails with that error is:

Executing command '[sh -c cat /tmp/-etc-hosts-123123 > /etc/hosts]' in node 'k3d-tl-server-0'

Any assistance with understanding the cause and solution would be much appreciated


Solution

  • http: invalid Host header

    It could be this bug in docker.

    To check, if it's the case, try doing docker exec to attach to a running container. Should you see that error, it's that bug.

    If it is the case: either downgrade, or wait until a fix is released
    (by the operating system maintainers, or maintainers of an external repository, whatever applies).

    I have this error with my current docker (24.0.4-ce built with go1.20.6) when using the "docker exec" command.