[英]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.