You need to enable JavaScript to run this app.
导航
节点端口访问(NodePort)
最近更新时间:2024.11.27 14:42:15首次发布时间:2022.03.04 23:10:38

节点端口访问(NodePort)是指在每个节点的 IP 上开放一个静态端口,通过静态端口对外暴露服务。本文介绍如何配置 NodePort 类型的服务。

背景信息

当在集群中创建一个节点端口访问(NodePort)服务时,系统会在每个节点的 IP 上开放一个静态端口。其他应用通过请求Node_IP:Node_Port即可访问服务。

节点的 IP 地址可以分配私网地址,也可以分配公网地址。因此,通过 NodePort 类型的服务,即可以对内提供服务,也可以对外提供服务。
alt

前提条件

操作步骤

通过控制台创建

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击目标集群名称。
  4. 在集群管理页面的左侧导航栏中,选择 服务与路由 > 服务,单击 创建服务,配置服务。
    • 基本信息
      配置项说明
      名称根据系统提示,配置服务的名称。在同一个命名空间下,名称必须唯一。
      命名空间选择服务所属的命名空间。建议选择您自定义的命名空间,或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述
      标签单击 添加标签 图标,配置服务的标签。标签能够为服务定义不同的属性,方便批量筛选等需求。
      注解对应 Kubernetes 中的 Annotation。单击 添加注解,为服务添加注解并配置键值对。
    • 访问配置
      alt
      配置项说明
      访问类型配置服务的访问类型,本例中选择:节点端口访问(NodePort)

      通信协议

      邀测·申请试用】针对 IPv4/IPv6 双栈集群,提供按需配置服务通信协议能力,兼容 IPv6 地址访问服务的业务场景。包括以下选项:

      • IPv4:表示仅支持 IPv4 地址访问服务。
      • IPv6:表示仅支持 IPv6 地址访问服务。
      • IPv4&IPv6:同时支持通过 IPv4 和 IPv6 访问服务,默认使用 IPv4。
      • IPv6&IPv4:同时支持通过 IPv6 和 IPv4 访问服务,默认使用 IPv6。

      说明

      IPv4/IPv6 双栈集群搭建方法参见:通过 VKE 搭建 IPv4/IPv6 双栈集群

      端口映射

      配置端口映射规则:

      • 名称:配置服务端口到容器端口映射的名称。
      • 服务端口:配置 Service 对外提供服务的端口。同一种协议的服务端口不允许重复。

      说明

      在 VPC-CNI 网络的集群中,不同协议的服务端口也不允许重复,即 TCP 和 UDP 协议不能用同一个服务端口号。

      • 协议:根据业务的协议类型,选择端口协议。当前支持 TCP 协议和 UDP 协议。
      • 节点端口:即 NodePort,取值范围为 30000~32767。不填写时,由系统自动分配端口。
      • 容器端口:配置容器的端口,该端口为工作负载对外提供服务的端口号。例如:Nginx 开放的默认端口号为 80。

      标签选择器

      Service 通过标签选择器与后端容器组实例(Pod)绑定:

      • 添加标签:通过添加工作负载的标签,关联 Service 到工作负载。
      • 关联工作负载:直接选择工作负载,关联到 Service。当前支持关联无状态负载(Deployment)、有状态负载(Statefulset)和守护进程(DaemonSet)。

      注意

      请勿将节点端口访问(NodePort)类型的 Service 与以弹性容器实例方式部署的工作负载关联。

      外部流量策略

      Service 转发外部流量的策略:

      • Cluster:流量可以均衡转发到工作负载对应的所有 Pod。
      • Local:流量只能转发到本节点的 Pod,可能存在流量不均衡转发问题,但可以保留客户端源 IP。

      会话保持

      是否启用会话保持功能。

      • 默认未配置,表示不启用会话保持功能。
      • 勾选 配置超时时间,启用会话保持功能,并配置会话保持的持续时间。启用后 Service 将来自同一个 IP 地址的访问请求转发到同一台后端服务器上。建议设置超时时间数值大于 120 秒。
  5. 单击 确定,完成配置。

通过 kubectl 命令行创建

说明

通过 kubectl 命令行配置 NodePort 访问类型的 Service 前请确保:

  • 已安装 kubectl 工具到本地。具体操作说明,请参见 安装和设置 kubectl
  • 已通过 kubectl 连接目标集群。具体操作说明,请参见 连接集群
  1. 创建工作负载的 YAML 文件。示例文件service-demo.yaml代码如下:
    apiVersion: v1
    kind: Service
    metadata:
      name: service-demo # 服务的名称。
    spec:
      selector:
        app: nginx # 通过标签选择器将服务与后段容器组(Pod)绑定。
      ipFamilyPolicy: PreferDualStack  # 通信协议类型。SingleStack 表示单栈,PreferDualStack 表示双栈。
      ipFamilies: # 具体使用的通信协议。单栈场景支持 IPv4、IPv6;双栈场景支持 IPv4&IPv6、IPv6&IPv4。
      - IPv6
      - IPv4
      ports:
      - name: rule # 端口映射规则名称。
        protocol: TCP # 服务协议,支持 TCP 或 UDP。
        port: 80 # 服务端口。
        nodePort: 30000 # 节点端口,取值范围为 30000~32767。 
        targetPort: 80 # 容器端口,即工作负载对外提供服务的端口号或端口名称,例如:Nginx 开放的默认端口号为 80。
      type: NodePort # 服务的类型。
    
  2. 执行以下命令,创建服务。
    kubectl apply -f service-demo.yaml
    

结果验证

查看服务

配置完成后,您可以在服务列表中查看已创建的服务。

alt

如果创建服务时没有指定节点端口,可以单击服务名称,查看服务详情,在 端口映射 中可以查看到系统自动分配的节点端口。

alt

访问服务

服务创建完成后,在集群相同 VPC 下或在集群容器内,均可以通过任意节点 IP + 节点端口访问到该服务。如果给节点绑定公网 IP 地址,也可以使用公网 IP 地址访问到该服务。

alt