当我尝试通过浏览器访问公开的 kubernetes
服务时出现问题 . 以下是我的环境 .
创建了两个 ubuntu
EC2实例(所有端口在安全组中打开)并安装了所有kubernetes相关工具,如kubectl,kubeadm,docker,calico network .
创建 nginx
pod,将其缩放为3并使用 LoadBalancer 类型公开它 . 当我从主节点或工作节点卷曲到暴露的nginx时,它工作正常(使用公共或私有IP) . 但如果我从外面卷曲,它就不起作用了 . 请求超时 . 我尝试删除服务并使用NodePort再次公开它 . 但我仍然无法从外面访问 . 我确保安全组允许进入 . 有没有办法调试为什么它无法从外部访问或我错过了什么
我没有运行 cloud controller manager
但是 kube-controller-manager
. 这会是一个问题吗?
下面是所有kubernetes组件的输出
ubuntu@ip-172-31-29-98:~$ kubectl get all --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default pod/nginx-6f858d4d45-2wtlh 1/1 Running 0 51m
default pod/nginx-6f858d4d45-5dkws 1/1 Running 0 51m
default pod/nginx-6f858d4d45-h9cwg 1/1 Running 0 51m
kube-system pod/calico-etcd-82xkv 1/1 Running 1 18h
kube-system pod/calico-kube-controllers-74b888b647-prr2q 1/1 Running 1 18h
kube-system pod/calico-node-kbckk 2/2 Running 4 17h
kube-system pod/calico-node-n5zhr 2/2 Running 3 18h
kube-system pod/coredns-78fcdf6894-qjhlq 1/1 Running 1 18h
kube-system pod/coredns-78fcdf6894-sm7c9 1/1 Running 1 18h
kube-system pod/etcd-ip-172-31-29-98 1/1 Running 1 18h
kube-system pod/kube-apiserver-ip-172-31-29-98 1/1 Running 1 18h
kube-system pod/kube-controller-manager-ip-172-31-29-98 1/1 Running 1 18h
kube-system pod/kube-proxy-jxg88 1/1 Running 1 18h
kube-system pod/kube-proxy-knx59 1/1 Running 1 17h
kube-system pod/kube-scheduler-ip-172-31-29-98 1/1 Running 1 18h
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18h
default service/nginx LoadBalancer 10.99.144.149 <pending> 80:31808/TCP 45m
kube-system service/calico-etcd ClusterIP 10.96.232.136 <none> 6666/TCP 18h
kube-system service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 18h
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system daemonset.apps/calico-etcd 1 1 1 1 1 node-role.kubernetes.io/master= 18h
kube-system daemonset.apps/calico-node 2 2 2 2 2 <none> 18h
kube-system daemonset.apps/kube-proxy 2 2 2 2 2 beta.kubernetes.io/arch=amd64 18h
NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
default deployment.apps/nginx 3 3 3 3 51m
kube-system deployment.apps/calico-kube-controllers 1 1 1 1 18h
kube-system deployment.apps/calico-policy-controller 0 0 0 0 18h
kube-system deployment.apps/coredns 2 2 2 2 18h
NAMESPACE NAME DESIRED CURRENT READY AGE
default replicaset.apps/nginx-6f858d4d45 3 3 3 51m
kube-system replicaset.apps/calico-kube-controllers-74b888b647 1 1 1 18h
kube-system replicaset.apps/calico-policy-controller-55b469c8fd 0 0 0 18h
kube-system replicaset.apps/coredns-78fcdf6894 2 2 2 18h
Edit 1: 试图在 GCloud
中做同样的事情 . 在 GCloud
也一样 . nginx
服务可通过节点内的私有/公共IP访问 . 但是当我从外面卷曲时,它不起作用 . 我在其中一个节点中启动了一个简单的python服务器,我可以从外部访问python服务器 . 但只有通过 kubernetes
公开的服务才能从外部卷入 .
我想我缺少一些关于 kubernetes
网络的基本理解(特别是在 Cloud 端) . 我能从专家那里得到任何帮助吗?
2 回答
我网络上的Internet防火墙阻止了对特定端口的访问 . Cloud 提供程序防火墙或实例防火墙没有任何问题 .
你是如何创建集群的?
kubeadm
?您需要一些自定义配置才能使您的群集与AWS一起运行 . 例如,您的kube-controller-manager
和kube-apiserver
需要选项--cloud-provider=aws
. 所有你的小册子都一样 .如果你不想处理这个,我建议使用kops .