k8s各种port

在编排kubernetes时,Deployment的Pod项有containerPort,Service文件里的port,targetPort, nodePort,这些port概念有些时候可能会让人感到非常困惑,这里通过示例来简单介绍各种port的含义

  • deploy yaml
apiVersion: v1
kind: Namespace
metadata:
  name: test
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb
  namespace: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
        - name: myweb
          image: kubeguide/tomcat-app:v1
          ports:
            - containerPort: 8080 # 容器内部需要暴露出去的Port
---
apiVersion: v1
kind: Service
metadata:
  name: myweb
  namespace: test
spec:
  type: NodePort
  ports:
    - port: 9000 # service暴露在cluster ip上的端口,通过<cluster ip>:port访问服务,通过此端口集群内的服务可以相互访问
      targetPort: 8080 # 对应映射到backend后端pod上的端口,需要和containerPort保持一致,否则访问出错。如果targetPort和port一致,则可以缺省。
      nodePort: 30001 # 对应映射到Node节点上的端口
  selector:
    app: myweb
---

应用yaml

$ kubectl apply -f service.yaml 

$ kubectl get svc,pod -n test -o wide
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE     SELECTOR
service/myweb   NodePort   10.98.233.194   <none>        9000:30001/TCP   2m47s   app=myweb

NAME                        READY   STATUS    RESTARTS   AGE     IP          NODE             NOMINATED NODE   READINESS GATES
pod/myweb-d5fbd67cd-gm4hj   1/1     Running   0          2m47s   10.1.2.69   docker-desktop   <none>           <none>
pod/myweb-d5fbd67cd-q7cjz   1/1     Running   0          2m47s   10.1.2.68   docker-desktop   <none>           <none>

端口映射关系如下图所示:
在这里插入图片描述

此时,可以通过以下三种方式进行访问:

## endpoint的方式 需在pod网络内 使用的是pod ip
curl 10.1.2.69:8080
## 服务方式 集群内 使用的是cluster ip
curl 10.98.233.194:9000
## 外网方式 集群外 使用的是node ip
curl 192.168.0.101:30001(curl localhost:30001)

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值