尝试使用 vagrant 和 virtualbox 创建 k3s 集群。
节点可以相互连接。 DNS 解析在 Pod 上进行,Pod 可以连接互联网,并且只要 Pod 运行在同一主机上,就可以连接到不同的 Pod。主机间 pod 网络无法正常工作。
这是我的 Vagrantfile,用于启动整个过程。
Vagrant.configure("2") do |config|
config.vm.provider "virtualbox" do |vb|
vb.memory = "1536"
end
config.vm.define "server" do |server|
server.vm.box = "ubuntu/jammy64"
server.vm.hostname = "server"
server.vm.network "forwarded_port", guest: 6443, host: 6443
server.vm.network :private_network, ip: '172.20.20.10', virtualbox__intnet: true
server.vm.provision "shell",
inline: "curl -sfL https://get.k3s.io | sh -s - server --write-kubeconfig /vagrant/config --write-kubeconfig-mode 666 --token=SECRET --tls-san 172.20.20.10 --flannel-iface enp0s8 --flannel-backend=wireguard-native --kube-apiserver-arg advertise-address=172.20.20.10 --node-external-ip=172.20.20.10 --node-ip=172.20.20.10"
end
config.vm.define "agent1" do |agent|
agent.vm.box = "ubuntu/jammy64"
agent.vm.hostname = "agent1"
agent.vm.network :private_network, ip: '172.20.20.11', virtualbox__intnet: true
agent.vm.provision "shell",
inline: "curl -sfL https://get.k3s.io | K3S_URL=https://172.20.20.10:6443 K3S_TOKEN=SECRET sh -s - --node-ip=172.20.20.11 --node-external-ip=172.20.20.11"
end
config.vm.define "agent2" do |agent|
agent.vm.box = "ubuntu/jammy64"
agent.vm.hostname = "agent2"
agent.vm.network :private_network, ip: '172.20.20.12', virtualbox__intnet: true
agent.vm.provision "shell",
inline: "curl -sfL https://get.k3s.io | K3S_URL=https://172.20.20.10:6443 K3S_TOKEN=SECRET sh -s - --node-ip=172.20.20.12 --node-external-ip=172.20.20.12"
end
end
我在这里缺少什么?
最初 DNS 解析不起作用。使用wireguard-native 作为 flannel 后端似乎可以解决这个问题。此外,此处描述的专用网络是仅主机适配器,因此将其更改为内部网络。
您的服务器节点缺少
--flannel-external-ip
标志,如果您转到 docs 您会看到
Use node external IP addresses as the destination for Flannel traffic,
instead of internal IPs. Only applies when --node-external-ip is set on a node.
这正是您的情况,因为您为每个节点指定了
--node-external-ip
,正如我测试的那样