如何在Kubernetes中访问没有服务的Pod

时间:2018-11-28 10:46:39

标签: kubernetes

我想知道当没有为特定Pod定义服务时如何访问Pod。如果通过环境变量,集群将如何检索这些变量?

此外,在定义服务时,它将存储在主节点上的什么位置?

亲切的问候, 查尔斯

4 个答案:

答案 0 :(得分:2)

  • 如果为应用定义了服务,则可以使用该服务在集群外部访问它

  • 服务有多种类型,包括nodePort,您可以在其中访问任何群集节点上的端口,并且无论吊舱的实际位置如何,都可以访问该服务

  • 您也可以访问集群内部的端点或实际Pod端口,但不能访问外部

  • 以上所有方法均使用kubernetes服务发现

  • 尽管有两种服务发现类型
  • 内部服务发现
  • 外部服务发现

enter image description here

答案 1 :(得分:1)

没有服务,您将无法“访问” pod容器端口。服务是定义最终iptable规则集所需状态的对象。

此外,服务和所有其他对象一样,都存储在etcd中并通过您的主服务器进行维护。

但是,您可以手动创建iptable规则,将流量转发到docker公开的本地容器端口。

希望这会有所帮助!如果您仍有任何疑问,请在此处放置。

答案 2 :(得分:0)

  • 所有群集数据都存储在etcd中,后者是分布式键值存储。如果etcd发生故障,群集将变得不稳定,并且无法出现新的Pod。

  • Kubernetes可以访问群集中的任何Pod。服务是访问由选择器绑定的一组Pod的逻辑方法。无论服务如何,仍然可以访问单个窗格。可以创建更多服务以从群集外部访问Pod(NodePort服务)

答案 3 :(得分:0)

仅出于调试目的,您可以将端口从计算机转发到Pod中的端口:

kubectl port-forward POD_NAME HOST_PORT:POD_PORT

如果必须从任何地方访问它,则应该使用服务,但必须创建一个部署

创建部署

kubectl create -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/service/networking/run-my-nginx.yaml

使用NodePort服务公开部署

kubectl expose deployment deployment/my-nginx --type=NodePort --name=nginx-service

然后列出服务并获取服务的端口

kubectl get services | grep nginx-service