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服务。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值