外部访问 kubernetes

external access to kubernetes

docker run \
    --volume=/:/rootfs:ro \
    --volume=/sys:/sys:ro \
    --volume=/var/lib/docker/:/var/lib/docker:rw \
    --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
    --volume=/var/run:/var/run:rw \
    --net=host \
    --pid=host \
    --privileged=true \
    -d \
    gcr.io/google_containers/hyperkube-amd64:v${K8S_VERSION} \
    /hyperkube kubelet \
        --containerized \
        --hostname-override="127.0.0.1" \
        --address="0.0.0.0" \
        --api-servers=http://localhost:8080 \
        --config=/etc/kubernetes/manifests \
        --cluster-dns=10.0.0.10 \
        --cluster-domain=cluster.local \
        --allow-privileged=true --v=2

A curl localhost:8080确认 API 是 运行。

但是尝试使用主机的 IP 访问它,例如 curl dockerHostIp:8080失败:

Failed to connect to ipOfDockerHost port 8080: Connection refused

如何将k8s暴露在外? (docker-host 是一个 ubuntu 服务器) 据我所知,使用 --net=host 应该可以解决这个问题。但在这种情况下它不起作用。

当您使用 docker 启动 kubernetes 时,您可以在两个模型之间进行选择:

如果您查看这些文件,您会注意到一个区别:--insecure-bind-address is different

当您使用 --config=/etc/kubernetes/manifests 时,您只要求本地访问。

您应该从 --config=/etc/kubernetes/manifests-multi 开始。

注意:

  • 使用 --config=/etc/kubernetes/manifests-multi
  • 时需要手动启动 etcd
  • 关注 this post,因为 docker 支持暂时不起作用