繁体   English   中英

Openstack上的Kubernetes,无法启动已启动的应用程序

[英]Kubernetes on openstack, applications launched are not accessible

在OpenStack VM上单节点kubernetes的方式是:

虚拟机IP:10.120.20.227(从外部)
etcd版本3.0.16
kubectl-版本1.5.7
法兰绒版本0.6.1

当我进入计算机时,我可以看到IP 192.168.0.5,因此etcd服务在192.168.0.5上运行,我可以从VM自身访问VM中启动的每个应用程序。 但是从外部openstack群集中,我无法使用VMs Public IP访问该应用程序。

kube-proxy错误是

May 22 18:38:16 poc-desktop kube-proxy[1246]: I0522 18:38:16.293261    1246 server.go:215] Using iptables Proxier.  
May 22 18:38:16 poc-desktop kube-proxy[1246]: W0522 18:38:16.293629    1246 server.go:468] Failed to retrieve node info: Get http://192.168.0.5:8080/api/v1/nodes/poc-desktop: dial tcp 192.168.0.5:8
May 22 18:38:16 poc-desktop kube-proxy[1246]: W0522 18:38:16.293761    1246 proxier.go:249] invalid nodeIP, initialize kube-proxy with 127.0.0.1 as nodeIP
May 22 18:38:16 poc-desktop kube-proxy[1246]: W0522 18:38:16.293773    1246 proxier.go:254] clusterCIDR not specified, unable to distinguish between internal and external traffic

如果在任何随机端口上在VM上启动任何Web服务,我都将访问Web应用程序。 但是,如果我使用kubectl启动应用程序,则无法从其他区域访问它?这是否需要任何特殊的路由? 还是kube-proxy出问题了?

我尝试过类似的事情。 所以我确实使用kubeadm设置了一个单节点k8s集群。 要使用kubeadm设置k8s集群,请在此处阅读更多内容。

在启动集群时,我注意要公开公共IP。 现在,如果您查看此计算机的默认网关地址172.17.133.24

$ ip a sh eth0 | grep inet
    inet 172.17.133.24/24 brd 172.17.133.255 scope global dynamic eth0

但是此IP地址是机器内部的,您无法从外部访问此IP地址。 在OpenStack控制台上,我可以看到与该实例相关的另一个地址,这是我可以从外部ping此计算机的地址,它是10.3.8.95

现在,如果您看到使用kubeadm启动群集时,我使用了10系列的IP地址。

# kubeadm init --skip-preflight-checks --apiserver-advertise-address=10.3.8.95                                                              
...
[addons] Created essential addon: kube-proxy
[addons] Created essential addon: kube-dns

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

  sudo cp /etc/kubernetes/admin.conf $HOME/
  sudo chown $(id -u):$(id -g) $HOME/admin.conf
  export KUBECONFIG=$HOME/admin.conf

...

现在,当我在k8s上启动应用程序时,我通过service公开了该应用程序,然后将该servicetypeClusterIP更改为NodePort

kubectl run web --image centos/httpd
kubectl expose deployment web --port 80
kubectl edit svc web

在上一个命令中将servicetype更改为NodePort

现在在此svc公开的机器上找到端口:

$ kubectl get svc web
NAME      CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
web       10.105.242.27   <nodes>       80:31628/TCP   19m

在上面的命令中,您可以看到服务web暴露在两个端口8031628 当您将服务作为NodePort公开时,它将在大于30000的随机端口上公开。

现在,要从外部访问此端口,我已经在OpenStack中创建了一个安全组,并允许将tcp端口从3000060000 并将此安全组添加到计算机。

现在我可以从笔记本电脑上卷曲机器

$ curl 10.3.8.95:31628
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
                <title>Apache HTTP Server Test Page powered by CentOS</title>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...

检查您的安全组,可能会让您的包裹从外面掉落。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM