我想知道当没有为特定Pod定义服务时如何访问Pod。如果通过环境变量,集群将如何检索这些变量?
此外,在定义服务时,它将存储在主节点上的什么位置?
亲切的问候, 查尔斯
答案 0 :(得分:2)
如果为应用定义了服务,则可以使用该服务在集群外部访问它
服务有多种类型,包括nodePort,您可以在其中访问任何群集节点上的端口,并且无论吊舱的实际位置如何,都可以访问该服务
您也可以访问集群内部的端点或实际Pod端口,但不能访问外部
以上所有方法均使用kubernetes服务发现
答案 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