Kubernetes - <unset>在服务端口中的含义是什么?

时间:2017-03-01 09:49:40

标签: kubernetes

我有一个服务暴露了type = LoadBalancer,当我做了

kubectl describe services servicename

我得到了这个输出:

Name:           ser1
Namespace:      default
Labels:         app=online1
Selector:       app=online1
Type:           LoadBalancer
IP:         10.0.0.32
External IPs:       192.168.99.100
Port:           <unset> 8080/TCP
NodePort:       <unset> 30545/TCP
Endpoints:      172.17.0.10:8080,172.17.0.11:8080,172.17.0.8:8080 + 1 more...
Session Affinity:   None

有人可以指导以下疑问:

1。)我无法理解<unset>在Port和NodePort中的含义。另外,它如何影响我的服务?

2.。)当我想点击某项服务时,我使用<external-ip:NodePort>点击该服务了吗?那么Port的用途是什么?

2 个答案:

答案 0 :(得分:18)

端口未设置表示:您未在服务创建中指定名称。

服务Yaml摘录(注意name: grpc):

spec:
  ports:
  - port: 26257
    targetPort: 26257
    name: grpc
  type: NodePort

kubectl describe services servicename输出摘录:

Type:                   NodePort
IP:                     10.101.87.248
Port:                   grpc    26257/TCP
NodePort:               grpc    31045/TCP
Endpoints:              10.20.12.71:26257,10.20.12.73:26257,10.20.8.81:26257

端口是服务将发送流量的容器端口的定义(实际端点)。

答案 1 :(得分:2)

回答问题的第二部分: When I want to hit a service, I hit the service using <external-ip:NodePort> right? Then what's the use of Port?

k8s 中的 Service 是虚拟 IP 和虚拟端口的组合。

就像我们为(以太网)接口分配 IP 以通过它进行通信一样,这种虚拟 IP:端口组合是一种通过服务进行通信的方式。

targetPort 是目标容器的端口。 (如果不指定,k8s默认为Service的端口(虚拟端口))

NodePort 是在机器的以太网接口(配置了 k8s 集群)上公开的端口。 (如果未指定,k8s 会为服务类型 NodePortLoadBalancer 选择 30000-32767 之间的随机可用端口)。

如您所见,虽然我们可以忽略 targetPortNodePort,但如果没有所讨论的“端口”(虚拟端口),则服务不存在。

顺便说一句:这些虚拟 IP 和服务端口完全存在于 IPtables 规则中(如果使用 IPtables)以及通过此虚拟 ip:port 来往节点或容器的转发规则。

请注意:Headless Service 是此概念的一个例外。