apiVersion: v1
kind: Service
metadata:
name: my-service # Service 的名称
spec:
type: NodePort # Service 类型为 NodePort
selector:
app: my-app # 根据标签选择器选择要关联的 Pod
ports:
- protocol: TCP # 服务端口的协议
port: 80 # Service 的端口
targetPort: 8080 # Pod 的目标端口
nodePort: 30080 # 暴露到节点的端口
apiVersion
:指定 Kubernetes API 的版本,这里使用的是v1
版本。kind
:指定资源的类型,这里是Service
。metadata
:用于定义资源的元数据,例如名称、标签等。name
:指定 Service 的名称为my-service
。
spec
:定义 Service 的规范。type
:指定 Service 类型为NodePort
。这表示将在每个节点上公开一个端口,并将流量转发到 Service。selector
:根据标签选择器选择要与 Service 关联的 Pod。app: my-app
:这里选择具有标签app: my-app
的 Pod 与该 Service 关联。
ports
:定义 Service 的端口配置。protocol
:指定服务端口的协议,这里使用的是 TCP。port
:指定 Service 的端口,这里设置为80
。targetPort
:指定将流量转发到 Pod 的目标端口,这里设置为8080
。nodePort
:指定要暴露到每个节点的端口,这里设置为30080
。
通过上述 YAML 文件,定义了一个名为 my-service
的 NodePort 类型的 Service。该 Service 关联带有标签 app: my-app
的 Pod,并将流量从每个节点的 30080
端口转发到与该标签匹配的 Pod 的 8080
端口上。
port 和nodeport的区别
在 Kubernetes 的 NodePort 类型的 Service 中,port
和 nodePort
是两个不同的概念,它们的区别如下:
-
port
:port
是 Service 的端口,用于标识 Service 监听的端口号。它是在集群内部使用的端口,用于将流量从 Service 转发到关联的 Pod 的targetPort
上。port
是在 Service 内部定义的,其他 Service 或外部用户可以使用它来访问 Service。 -
nodePort
:nodePort
是 Service 暴露到每个节点的端口,用于外部访问 Service。当 Service 类型设置为 NodePort 时,Kubernetes 会在每个节点上打开一个相同的nodePort
,并将流量转发到 Service 的port
上。nodePort
是在整个集群范围内定义的,它允许从集群外部通过节点的 IP 地址和nodePort
访问 Service。
在总结上述区别时:
port
是 Service 内部使用的端口,用于将流量从 Service 转发到 Pod。nodePort
是 Service 暴露到每个节点的端口,用于从集群外部访问 Service。
需要注意的是,nodePort
的取值范围是 30000-32767
,因此在定义 nodePort
时需要确保不与其他已使用的端口冲突。
这两个端口是 Service 的两个不同层级的端口,port
用于 Service 内部的流量转发,而 nodePort
用于从集群外部访问 Service。