Kubernetesdocker样本不暴露端口

正如我在探索kubernetes,我从文档build议的基于docker的入门指南开始。 该指南可以在这里find: https : //github.com/GoogleCloudPlatform/kubernetes/blob/release-1.0/docs/getting-started-guides/docker.md

打破GUID,它build议运行以下命令:

docker run --net=host -d gcr.io/google_containers/etcd:2.0.9 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data docker run --net=host -d -v /var/run/docker.sock:/var/run/docker.sock gcr.io/google_containers/hyperkube:v0.21.2 /hyperkube kubelet --api_servers=http://localhost:8080 --v=2 --address=0.0.0.0 --enable_server --hostname_override=127.0.0.1 --config=/etc/kubernetes/manifests docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v0.21.2 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2 ./kubectl -s http://localhost:8080 run-container nginx --image=nginx --port=80 ./kubectl expose rc nginx --port=80 

这些命令在我的机器上生成以下输出:

 5a0993be2df88f9da448234490ce98f744a47d0ff3ec2e9b9ba76ff8c85eb600 0c9ab039e8024d5596b87eb294ad31538ba8864509d9886c4217e6fe47416f1a d413be16d3f0167bbaacba7582d22a1752b2195fe8d7f7333bbcb5ce2d2a7b20 CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS nginx nginx nginx run=nginx 1 NAME LABELS SELECTOR IP(S) PORT(S) nginx run=nginx run=nginx 80/TCP 

我现在想知道为什么“IP(S)”列不显示IP地址。 看着我的docker ps输出:

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4c5d8c790daa nginx "nginx -g 'daemon of 4 minutes ago Up 4 minutes k8s_nginx.d7d3eb2f_nginx-em03c_default_c7d89937-3df9-11e5-b322-20689deb710c_b7323a43 cedfe5cf7841 gcr.io/google_containers/pause:0.8.0 "/pause" 4 minutes ago Up 4 minutes k8s_POD.ef28e851_nginx-em03c_default_c7d89937-3df9-11e5-b322-20689deb710c_cf507bf9 a92be0abae29 gcr.io/google_containers/hyperkube:v0.21.2 "/hyperkube schedule 5 minutes ago Up 5 minutes k8s_scheduler.b725e775_k8s-master-127.0.0.1_default_9b44830745c166dfc6d027b0fc2df36d_85e00e91 7910edc79350 gcr.io/google_containers/hyperkube:v0.21.2 "/hyperkube apiserve 5 minutes ago Up 5 minutes k8s_apiserver.70750283_k8s-master-127.0.0.1_default_9b44830745c166dfc6d027b0fc2df36d_03ed1050 23d1d3f9eac0 gcr.io/google_containers/hyperkube:v0.21.2 "/hyperkube controll 5 minutes ago Up 5 minutes k8s_controller-manager.aad1ee8f_k8s-master-127.0.0.1_default_9b44830745c166dfc6d027b0fc2df36d_17695204 caccad2f2e68 gcr.io/google_containers/pause:0.8.0 "/pause" 5 minutes ago Up 5 minutes k8s_POD.e4cc795_k8s-master-127.0.0.1_default_9b44830745c166dfc6d027b0fc2df36d_fb79862d d413be16d3f0 gcr.io/google_containers/hyperkube:v0.21.2 "/hyperkube proxy -- 5 minutes ago Up 5 minutes nostalgic_colden 0c9ab039e802 gcr.io/google_containers/hyperkube:v0.21.2 "/hyperkube kubelet 5 minutes ago Up 5 minutes suspicious_ritchie 5a0993be2df8 gcr.io/google_containers/etcd:2.0.9 "/usr/local/bin/etcd 5 minutes ago Up 5 minutes loving_einstein2 

我想知道为什么Nginx容器没有端口映射。

一个kubernetes服务如何将stream量路由到一个不暴露任何端口的docker容器? 自文档写入以来有什么改变吗? 还是有什么我失踪?

使用的版本:

./kubectl version

 Client Version: version.Info{Major:"0", Minor:"18", GitVersion:"v0.18.2", GitCommit:"1f12b893876ad6c41396222693e37061f6e80fe1", GitTreeState:"clean"} Server Version: version.Info{Major:"0", Minor:"21", GitVersion:"v0.21.2", GitCommit:"4e89f2e6670b1662021a86ac42b99c5c50c37d05", GitTreeState:"clean"} 

docker version

 Client version: 1.7.0 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 0baf609 OS/Arch (client): linux/amd64 Server version: 1.7.0 Server API version: 1.19 Go version (server): go1.4.2 Git commit (server): 0baf609 OS/Arch (server): linux/amd64 

kubectl expose命令创build一个服务,但是它的select器与创build的pod不匹配。

您可以使用./kubectl expose rc nginx -l run=nginx --port=80来创build一个使用run=nginx作为select器的服务。

然后运行kubectl describe service nginx显示:

 W0809 14:05:26.337988 3423 request.go:291] field selector: v1beta3 - events - involvedObject.kind - Service: need to check if this is versioned correctly. W0809 14:05:26.340098 3423 request.go:291] field selector: v1beta3 - events - involvedObject.uid - deb1c06e-3e8e-11e5-aa11-20689deb710c: need to check if this is versioned correctly. W0809 14:05:26.340197 3423 request.go:291] field selector: v1beta3 - events - involvedObject.name - nginx: need to check if this is versioned correctly. W0809 14:05:26.340243 3423 request.go:291] field selector: v1beta3 - events - involvedObject.namespace - default: need to check if this is versioned correctly. Name: nginx Labels: run=nginx Selector: run=nginx Type: ClusterIP IP: 10.0.0.201 Port: default 80/TCP Endpoints: 172.17.0.29:80 Session Affinity: None No events. 

当你现在导航到172.17.0.29:80端点时,你可以看到你的nginx正在运行。

对于我来说,原始示例正常工作(即使您没有获得在命令输出中列出的IP)。 但我无法从外部访问它。 我不得不将--public-ip=添加到expose命令中,它像一个魅力一样工作(即使我仍然没有得到在命令输出中输出的IP)。

我注意到,如果使用kubectl expose rc nginx --port=80kubectl describe service nginx它显示:

 ... Endpoints: <none> ... 

但是,如果您等待几秒钟并再次运行kubectl describe service nginx ,则会显示如下内容:

 ... Endpoints: 172.17.0.7:80 ... 

无论如何,它不显示kubectl describe service nginx命令输出中的IP,您将需要kubectl describe service nginx命令。 也许指南应该更新。