簡體   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