[英]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
公开了该应用程序,然后将该service
的type
从ClusterIP
更改为NodePort
。
kubectl run web --image centos/httpd
kubectl expose deployment web --port 80
kubectl edit svc web
在上一个命令中将service
的type
更改为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
暴露在两个端口80
和31628
。 当您将服务作为NodePort
公开时,它将在大于30000
的随机端口上公开。
现在,要从外部访问此端口,我已经在OpenStack中创建了一个安全组,并允许将tcp端口从30000
为60000
。 并将此安全组添加到计算机。
现在我可以从笔记本电脑上卷曲机器
$ 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.