k8s服务的配置文件中几个端口参数,nodePort、port、targetPort,刚开始的时候不理解什么意思很容易混淆写错,这里总结一下,概括来说就是nodePort和port都是k8s的service暴露的端口,targetPort是容器本身暴露的端口。区别是nodePort暴露给k8s集群外部流量访问用,port暴露给k8s集群内部服务访问用。从上两个端口过来的数据最终都需要经过反向代理kube-proxy,流入后端pod的targetPort上,最后到达pod内的容器。

下面具体解释一下

首先明确容器部署后是只需要k8s集群内部使用还是需要通过集群外使用,如果不需要集群外访问就不需要nodePort,直接如下写就可以

spec:
clusterIP: None
ports:
- name: {{ .Values.service.name }}

  下面详细说说每个端口的意思

1、nodePort 端口

k8s集群中发发布完service之后,如果需要外部访问,nodePort是一种访问方式,即nodePort是提供给外部流量访问k8s集群中service使用的端口。例如外部用户要访问k8s集群中的一个Web应用,那么我们可以配置对应的service如下,就可以从外部通过浏览器http://node:28080访问到该web服务。

注意如果配置文件中不指定nodePort,部署后k8s会自动指定一个端口号来用。

spec:
type: NodePort
ports:
- name: {{ .Values.service.name }}
nodePort: 28080

2、port 端口

k8s集群内部服务之间相互访问service的端口。例如连接mysql使用3306端口,容器创建后暴露了3306端口,集群内其他容器想通过23306端口访问mysql服务,但是没有配置NodePort,外部流量就不能访问mysql服务。对应的service.yaml如下

spec:
type: NodePort
ports:
- name: {{ .Values.service.name }}
port: 23306
protocol: TCP
targetPort: 3306

3、targetPort端口

从上面例子也能看出来targetPort是什么,它就是容器真正暴露的端口(使用DockerFile中的EXPOSE),targetPort是pod上的端口,从port和nodePort上来的流量,经过kube-proxy流入到后端pod的targetPort上,最后进入容器内。例如一个容器暴露8080端口的tomcat完整配置如下,nodePort可以不配,会自动指定一个端口。

spec:
type: NodePort
ports:
- name: {{ .Values.service.name }}
nodePort: 28080 # 外部通过28080访问
port: 28081 # k8s集群内service通过28081访问
protocol: TCP
targetPort: 8080 # 容器实际暴露端口
selector:
app: {{ .Values.appName }}

需要开放多个端口是,在ports下面依次配置多个端口就好,例如

spec:
type: NodePort
ports:
- name: {{ .Values.service.name }}
port: {{ .Values.service.port }}
protocol: TCP
targetPort: {{ .Values.service.targetPort }}
- name: {{ .Values.service.managerName }}
port: {{ .Values.service.managerPort }}
protocol: TCP
targetPort: {{ .Values.service.managerTargetPort }}
selector:
app: {{ .Values.appName }}

kubernetes容易混淆的几个端口的更多相关文章

  1. Kubernetes使用Eedpoints连接外部服务端口

    Kubernetes使用Eedpoints连接外部服务端口 背景: 在Kubernetes的使用环境中,我们经常要连接外部的一些服务,比如mysql Elasticsearch kafka 等等外部的 ...

  2. Kubernetes service 三种类型/NodePort端口固定

    Kubernetes service 三种类型 • ClusterIP:默认,分配一个集群内部可以访问的虚拟IP(VIP)• NodePort:在每个Node上分配一个端口作为外部访问入口• Load ...

  3. kubernetes 外部访问集群暴露端口服务

    在yaml文件中多个不同类型资源可以用“---”在划分 name: httpd2-svc namespace: kube-public    #给资源分配网络   所用资源将在 kube-public ...

  4. 在Openstack上创建并访问Kubernetes集群

    第一部分:创建集群 在Openstack部署Kubernetes集群运行Nginx容器的步骤,其中包括: 利用Murano部署Kubernetes集群 配置Openstack的安全性使Kubernet ...

  5. Docker Kubernetes 环境搭建

    Docker Kubernetes 环境搭建 节点规划 版本 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 etcd存储版本:etcd-3. ...

  6. Docker Kubernetes 常用命令

    Docker Kubernetes 常用命令 增 # 通过文件名或标准输入创建资源. kubectl create # 读取指定文件内容,进行创建.(配置文件可指定json,yaml文件). kube ...

  7. k8s技术--Kubernetes集群kubectl命令的常见使用方法

    简介:kubectl是一个命令行界面,用于运行针对Kubernetes群集的命令. 语法: kubectl [command] [TYPE] [NAME] [flags] command:指定您希望对 ...

  8. Kubernetes 选择 IPVS

    什么是 IPVS ? IPVS (IP Virtual Server)是在 Netfilter 上层构建的,并作为 Linux 内核的一部分,实现传输层负载均衡. IPVS 集成在 LVS(Linux ...

  9. [Kubernetes]Kubernetes的网络模型

    Kubernetes的网络模型从内至外由四个部分组成: Pod内部容器所在的网络 Pod所在的网络 Pod和Service之间通信的网络 外界与Service之间通信的网络 建议在阅读本文之前先了解D ...

随机推荐

  1. IOS-App 运行installation failed原因及解决方法

    解决方法如下: Bundle Identifier不能为空

  2. 从库因为sql错误导致主从同步被中断的问题解决

    从库因为sql错误导致主从同步被中断的问题解决:show slave status\G;看lasterror:看延迟多少秒,正常情况下是没有延迟的. 跳过错误的那条sql:SET GLOBAL SQL ...

  3. WPScan使用完整攻略:如何对WordPress站点进行安全测试

    转载自FreeBuf.COM 严正声明:本文仅限于技术探讨,严禁用于其他目的. 写在前面的话 在这篇文章中,我将告诉大家如何使用WPScan来对WordPress站点进行安全测试. WPScan是Ka ...

  4. Windows下的3389端口渗透

    1.Win7.Win2003.XP系统 在CMD命令行开启3389端口:REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" &qu ...

  5. 01.02 linux命令(1

    =================常用的Linux命令============================Ls 查看当前文件夹下或者其他文件夹的文件列表或者文件夹列表Ls  -l 详细信息的列表L ...

  6. Linux基础(特基本的那种)知识

    (自己的随手笔记,记得有点乱请轻喷) which:查看某个命令的完整路径df -h:查看系统磁盘情况history:查看历史输入的命令 网卡配置路径:vim /etc/sysconfig/networ ...

  7. TensorFlow.资料

    1.ZC:看来  要用 TensorFlow,基本逃不过 Python了... TensorFlow物体识别——通过机器学习搭建属于自己的物体识别库 - 迷途无归的博客 - CSDN博客.html(h ...

  8. pandas越来越难学,只能自己找趣味了,你该这么学,No.11

    啊,大海啊,全是水 pandas啊,全是坑 没错,今天继续学习难的 其实从这篇开始,每一篇都是难得...... 你必须要努力看了 文末有彩蛋 分层/多级索引 我们先创建一个分层索引,看看效果 这个创建 ...

  9. linux之dup和dup2函数解析

    1. 文件描述符在内核中数据结构在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态.一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个 ...

  10. Reactor系列(二)Flux Mono创建

    Flux Mono创建 视频讲解:https://www.bilibili.com/video/av78844777/ FluxMonoTestCase.java package com.exampl ...