2015-09-30 57 views
2

据我了解,KUBE-代理每Kubernetes节点上运行Kubernetes:链接荚KUBE-代理

如果我理解正确的(它是在法师和工作节点上启动),它也是'推荐'的方式来访问该API(请参阅:https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/user-guide/accessing-the-cluster.md#accessing-the-api-from-a-pod

因此,由于kube-proxy已经在每个节点上运行,因此是使用新kube代理容器启动每个pod的“推荐”方式,或者有可能以某种方式'链接'到正在运行的kube-proxy容器?

我原来是用与$ KUBERNETES_SERVICE_HOST的URL和一个秘密传递,对GKE的凭据, 调用

curl https://$USER:[email protected]${KUBERNETES_SERVICE_HOST}/api/v1/namespaces/${NAMESPACE}/endpoints/${SELECTOR} 

和分析的结果,但K8S部署CoreOS集群上我似乎只能够通过TLS和证书进行身份验证,并且链接代理似乎是更好的方式。

所以,我在寻找最有效的/最简单的方法从吊舱连接到API来查找IP由服务提及的另一种吊舱。

任何建议/输入?

回答

5

有一对夫妇选择这里,因为在你所提供的文档的链接注意。

的优选方法是使用Service Accounts访问API:

的简短说明的是,服务将读出的服务账户的秘密,其安装到所述料盒(令牌/ CA-CERT),然后注入令牌放入http头中,并使用CA-cert验证apiserver证书。这略微简化了服务帐户的描述,但上述链接可以提供更多细节。

例利用内幕荚卷曲和服务的帐户数据:

curl -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt https://kubernetes/api/v1/namespaces 

另一种选择,在你所提供的链接中提到,是运行运行在同一荚“kubectl代理”侧面汽车集装箱作为你的申请。

的说明澄清了:“KUBE-代理”和“kubectl代理”不是指同样的事情。该KUBE-代理负责路由“服务”的要求,kubectl代理是打开的本地代理的Kubernetes API一个CLI CMD。

在运行kubectl proxy时发生的情况是,kubectl命令已经知道如何使用服务帐户数据,所以它会提取令牌/ CA-cert并为您建立到API服务器的连接,然后暴露在盒局部的界面(它可以不用任何AUTH/TLS使用)。

这可能是一个更简单的方法,因为它可能不需要对现有应用程序进行更改,而不必将其指向在同一个窗格中运行的本地kubectl代理容器。

另一个侧面说明:我不确定您的确切用例,但通常最好使用服务IP /服务DNS名称,并允许Kubernetes处理服务发现,而不是提取Pod IP本身(如果吊舱被安排到不同的机器上,吊舱IP将会改变)。

+0

感谢Aaron, 我对于如何使用kubectl代理感到困惑:它在本地主机上可用,但对我来说,kubectl是一个命令行工具,我该如何使用侧面汽车的容器? 这个'示例'https://github.com/kubernetes/kubernetes/tree/release-1.0/examples/kubectl-container解释了一下,我希望我的理解正确:kubectl与'-p proxy 8001'参数基本相同作为通过 通过连接的pod使用wget到localhost和8001端口,这意味着kubectl实际上接收HTTP请求并将其转发给api服务器。那是对的吗? – MrE

+0

btw:我知道我可以使用服务名称并利用DNS,但是像HBase这样的服务似乎是通过主机名来引用节点。有一个关于DNS的整个问题线程,它只是被推送,但同时我需要一个替代方案。 – MrE

+0

@MrE这几乎是发生了什么事情。一个容器中的所有容器将基本上共享相同的网络。因此,在一个容器中,您通过长命令cli命令('kubectl proxy')运行代理,并在您的应用程序容器中通过本地主机连接到该代理。 –