kubernetes - 设置 Kubernetes - 无法从 Pod 访问 API
问题描述
我正在尝试在(Ubuntu 16)VM 上设置一个基本的 Kubernetes 集群。我刚刚关注了入门文档,并期望有一个工作集群,但不幸的是,没有这样的运气 - 似乎没有 pod 无法连接到 Kubenernetes API。因为我是 Kubernetes 的新手,所以我很难找到哪里出了问题。提供脚本:
apt-get update && apt-get upgrade -y
apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl docker.io
apt-mark hold kubelet kubeadm kubectl
swapoff -a
sysctl net.bridge.bridge-nf-call-iptables=1
kubeadm init
mkdir -p /home/ubuntu/.kube
cp -i /etc/kubernetes/admin.conf /home/ubuntu/.kube/config
chown -R ubuntu:ubuntu /home/ubuntu/.kube
runuser -l ubuntu -c "kubectl apply -f \"https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')\""
runuser -l ubuntu -c "kubectl taint nodes --all node-role.kubernetes.io/master-"
安装似乎很好。
ubuntu@packer-Ubuntu-16:~$ kubectl get pods -o wide --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-86c58d9df4-lbp46 0/1 CrashLoopBackOff 7 18m 10.32.0.2 packer-ubuntu-16 <none> <none>
kube-system coredns-86c58d9df4-t8nnn 0/1 CrashLoopBackOff 7 18m 10.32.0.3 packer-ubuntu-16 <none> <none>
kube-system etcd-packer-ubuntu-16 1/1 Running 0 17m 145.100.100.100 packer-ubuntu-16 <none> <none>
kube-system kube-apiserver-packer-ubuntu-16 1/1 Running 0 18m 145.100.100.100 packer-ubuntu-16 <none> <none>
kube-system kube-controller-manager-packer-ubuntu-16 1/1 Running 0 17m 145.100.100.100 packer-ubuntu-16 <none> <none>
kube-system kube-proxy-dwhhf 1/1 Running 0 18m 145.100.100.100 packer-ubuntu-16 <none> <none>
kube-system kube-scheduler-packer-ubuntu-16 1/1 Running 0 17m 145.100.100.100 packer-ubuntu-16 <none> <none>
kube-system weave-net-sfvz5 2/2 Running 0 18m 145.100.100.100 packer-ubuntu-16 <none> <none>
问题:Kubernetes pod 的 IP 是主机的 eth0 的 IP(145.100.100.100)是否正常?对我来说似乎很奇怪,我希望他们有一个虚拟 IP?
如您所见,coredns
pod 正在崩溃,因为它无法访问 API。
据我了解,服务:
ubuntu@packer-Ubuntu-16:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22m
CoreDNS 崩溃,因为 API 无法访问:
ubuntu@packer-Ubuntu-16:~$ kubectl logs -n kube-system coredns-86c58d9df4-lbp46
.:53
2018-12-06T12:54:28.481Z [INFO] CoreDNS-1.2.6
2018-12-06T12:54:28.481Z [INFO] linux/amd64, go1.11.2, 756749c
CoreDNS-1.2.6
linux/amd64, go1.11.2, 756749c
[INFO] plugin/reload: Running configuration MD5 = f65c4821c8a9b7b5eb30fa4fbc167769
E1206 12:54:53.482269 1 reflector.go:205] github.com/coredns/coredns/plugin/kubernetes/controller.go:318: Failed to list *v1.Namespace: Get https://10.96.0.1:443/api/v1/namespaces?limit=500&resourceVersion=0: dial tcp 10.96.0.1:443: i/o timeout
E1206 12:54:53.482363 1 reflector.go:205] github.com/coredns/coredns/plugin/kubernetes/controller.go:311: Failed to list *v1.Service: Get https://10.96.0.1:443/api/v1/services?limit=500&resourceVersion=0: dial tcp 10.96.0.1:443: i/o timeout
E1206 12:54:53.482540 1 reflector.go:205] github.com/coredns/coredns/plugin/kubernetes/controller.go:313: Failed to list *v1.Endpoints: Get https://10.96.0.1:443/api/v1/endpoints?limit=500&resourceVersion=0: dial tcp 10.96.0.1:443: i/o timeout
我尝试启动一个简单的alpine
pod/容器。并且确实10.96.0.1
不响应 ping 或其他任何东西。
我被困在这里。我尝试了很多谷歌,但没有任何结果,我的理解非常基本。我猜网络出了点问题,但我不知道是什么(对我来说,这样做似乎很可疑,get pods
pod 会显示主机 IP,但也许这也是正常的?)
解决方案
我发现问题是由主机的iptables
规则引起的。
推荐阅读
- backup - Hyperledger Fabric - 备份和恢复
- node.js - 使用预处理器重定向/删除 hapijs 中的查询字符串
- c - 是否可以读取和连接与任何具有唯一 ID 的 Hardarwe 连接的 STM32F429ZI 微控制器的唯一 hardarwe ID?
- php - 有没有办法隐藏通过事件侦听器传递的“全局”变量的值,同时仍然让脚本运行?
- javascript - 无法将类添加到 $(this) 的下一个元素
- google-cloud-platform - 错误:函数执行失败。遵循 Google Cloud Scheduler / PubSub 教程时出错
- python - 在 Pandas 中,有没有办法根据数据范围分配值?
- ios - TableView didselect performSegue 双击
- javascript - 从 Typescript 类型/接口生成 Joi Schema
- java - 如何比较Java中的字谜中的所有字母