You need to enable JavaScript to run this app.
导航

节点端口访问(NodePort)

最近更新时间2023.11.22 14:29:00

首次发布时间2022.03.04 23:10:38

节点端口访问(NodePort)是指在每个节点的 IP 上开放一个静态端口,通过静态端口对外暴露服务。其他应用通过请求Node_IP:Node_Port,即可访问服务。
节点的 IP 地址可以分配私网地址,也可以分配公网地址。因此,通过节点访问方式,可以对内或对外暴露服务。
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,可以填写具体的端口,也可以不填写。不填写具体值时系统自动分配端口。
      • 容器端口:配置容器的端口,该端口为工作负载对外提供服务的端口号或端口名称。例如:Nginx 开放的默认端口号为 80。

      标签选择器

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

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

      注意

      请勿将节点端口访问(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