k8s基础概念:port ,targetport,nodeport

在Kubernetes中,有三种类型的端口与Service相关:porttargetPortNodePort。它们分别用于不同的用途:

  1. portport字段定义了Service暴露给集群内部和外部的端口号。当你创建一个Service时,其他应用或服务可以通过该端口与Service进行通信,将请求发送到Service上。这个端口号是Service在Kubernetes集群内部和外部可见的端口。

  2. targetPorttargetPort字段定义了Service将流量转发到后端Pod的容器端口号。当请求进入Service时,Service会根据其定义将请求转发到后端Pod的这个指定端口。通常,后端Pod中的应用程序在指定的容器端口上监听并处理请求。

  3. NodePortNodePort是一种Service类型,它允许通过Kubernetes集群中的每个节点的IP地址和指定的端口号访问Service。NodePort是将外部流量导入到Service的一种方式。Kubernetes会在集群中的每个节点上打开一个高端口(30000-32767范围内),并将该端口映射到Service的porttargetPort上。这样,你可以通过任何节点的IP地址和NodePort来访问Service。

下面是一个示例Service的定义,演示了这三个端口的用法:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080
  type: NodePort

在上述示例中,port: 80定义了Service暴露给集群外部和内部的端口,targetPort: 8080定义了将流量转发到后端Pod的容器端口。另外,type: NodePort将Service的类型设置为NodePort,允许通过每个节点的IP地址和随机高端口访问Service。

请注意,NodePort是一种简单的方式来暴露Service到集群外部,但在生产环境中,通常会使用更高级的负载均衡器或Ingress控制器来处理流量分发和SSL终止等更高级的功能。

例如:

// 创建一个nginx pod
kubectl create deployment nginx  --image=nginx
// 创建一个类型为NodePort类型的svc,8181是对集群内部和外部暴露的端口,80是Service将流量转发到后端Pod的容器端口号
kubectl expose deploy nginx  --port=8181 --target-port=80  --type=NodePort

在这里插入图片描述
创建成功之后可以看到k8s自动分配了节点宿主机的32313端口给nginx service,宿主机端口32313的流量会被转发到集群内的8181端口,集群8181端口的流量又会被转发到pod的80端口,所以我们在宿主机上直接访问 curl localhost:32313 就能够访问到pod里的nginx服务。
k8s基础概念:port ,targetport,nodeport_第1张图片

你可能感兴趣的:(k8s,kubernetes,容器,云原生)