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

Cha*_*mme 5 kubernetes

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

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

亲切的问候,查尔斯

小智 5

您无法在没有服务的情况下“访问”pods 容器端口。服务是定义最终 iptable 规则集的期望状态的对象。

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

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

希望这可以帮助!如果您还有任何问题,请将它们放在这里。

  • 好的,我知道服务是从集群外部访问所必需的,并且存储在主节点的 etcd 中。想象一下,节点 A 上的 pod 1 想要访问节点 B 上的 pod 2 提供的功能。如果没有服务,pod 1 如何知道如何到达 pod 2? (3认同)

Ija*_*han 5

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

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

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

  • 以上都使用了kubernetes服务发现

  • 虽然有两种类型的服务发现
  • 内部服务发现
  • 外部服务发现。

在此处输入图片说明


小智 5

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

kubectl port-forward POD_NAME HOST_PORT:POD_PORT
Run Code Online (Sandbox Code Playgroud)

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

创建部署

kubectl create -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/service/networking/run-my-nginx.yaml
Run Code Online (Sandbox Code Playgroud)

使用 NodePort 服务公开部署

kubectl expose deployment deployment/my-nginx --type=NodePort --name=nginx-service
Run Code Online (Sandbox Code Playgroud)

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

kubectl get services | grep nginx-service
Run Code Online (Sandbox Code Playgroud)