• kubernetes容易混淆的几个端口


    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 }} 
  • 相关阅读:
    SQL利用Case When Then多条件判断
    SQL 中LTrim、RTrim与Trim的用法
    SELECT 与 SET 对变量赋值的区别(存储过程)
    exec/sp_executesql语法
    SQLServer : EXEC和sp_executesql的区别
    使用系统监视器监视系统性能
    Centos6.5下OpenLdap搭建(环境配置+双机主从配置+LDAPS+enable SSHA)
    迁移与裁剪linux系统
    Windows Server 2008 R2远程桌面服务配置和授权激活(转)
    cookie、session、sessionid 与jsessionid(转)
  • 原文地址:https://www.cnblogs.com/yanh0606/p/11207762.html
Copyright © 2020-2023  润新知