【发布时间】:2018-11-29 18:43:27
【问题描述】:
我想知道当没有为特定 pod 定义服务时如何访问 pod。如果是通过环境变量,集群如何获取这些?
另外,定义服务时,它存储在主节点的什么位置?
亲切的问候, 查尔斯
【问题讨论】:
标签: kubernetes
我想知道当没有为特定 pod 定义服务时如何访问 pod。如果是通过环境变量,集群如何获取这些?
另外,定义服务时,它存储在主节点的什么位置?
亲切的问候, 查尔斯
【问题讨论】:
标签: kubernetes
【讨论】:
如果没有服务,您将无法“访问” Pod 容器端口。服务是定义最终 iptable 规则集所需状态的对象。
此外,与所有其他对象一样,服务存储在 etcd 中并通过您的主服务器进行维护。
但是,您可以手动创建一个 iptable 规则,将流量转发到 docker 已公开的本地容器端口。
希望这会有所帮助!如果您仍有任何问题,请在此处提出。
【讨论】:
仅出于调试目的,您可以将机器中的端口转发到 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
【讨论】:
所有集群数据都存储在 etcd 中,这是一个分布式键值存储。如果 etcd 出现故障,集群会变得不稳定,并且无法启动新的 pod。
Kubernetes 可以访问集群中的任何 pod。服务是访问由选择器绑定的一组 pod 的逻辑方式。无论服务如何,仍然可以访问单个 pod。可以创建更多服务以从集群外部访问 Pod(NodePort 服务)
【讨论】: