更新时间:2023-12-04 gmt 08:00

dnat网关(dnat)-凯发k8国际娱乐官网入口

操作场景

dnat网关可以为集群节点提供网络地址转换服务,使多个节点可以共享使用弹性ip

nat网关与弹性ip方式相比增强了可靠性,弹性ip无需与单个节点绑定,任何节点状态的异常不影响其访问。访问方式由公网弹性ip地址以及设置的访问端口组成,例如“10.117.117.117:80”。

图1 dnat网关 ( dnat )

约束与限制

关于nat网关的使用,您需要注意以下几点:

  • dnat规则不支持企业项目授权。
  • 集群内容器不支持访问externaltrafficpolicy为local模式的dnat service。
  • 同一个nat网关下的多条规则可以复用同一个弹性公网ip,不同网关下的规则必须使用不同的弹性公网ip。
  • 每个vpc支持的nat网关数为1。
  • 用户不能在vpc下手动添加默认路由。
  • vpc内的每个子网只能添加一条snat规则。
  • snat规则和dnat规则一般面向不同的业务,如果使用相同的eip,会面临业务相互抢占问题,请尽量避免。snat规则不能和全端口的dnat规则共用eip。
  • dnat规则不支持将弹性公网ip绑定到虚拟ip。
  • 当云主机同时配置弹性公网ip服务和nat网关服务时,数据均通过弹性公网ip转发。
  • snat规则中添加的自定义网段,对于虚拟私有云的配置,必须是虚拟私有云子网网段的子集,不能相等。
  • snat规则中添加的自定义网段,对于云专线的配置,必须是云专线侧网段,且不能与虚拟私有云侧的网段冲突。
  • 当执行云服务器底层资源操作(如变更规格)时,会导致已配置的nat规则失效,需要删除后重新配置。
  • 创建service后,如果服务亲和从集群级别切换为节点级别,连接跟踪表将不会被清理,建议用户创建service后不要修改服务亲和属性,如需修改请重新创建service。
  • 当集群的节点子网关联了自定义路由表时,使用dnat类型service同时需要将nat的路由加入到自定义路由表中。

创建nat网关和弹性公网ip

您需要提前创建nat网关实例和弹性公网ip,具体操作步骤如下:

  1. 登录管理控制台,在服务列表中选择“网络 > nat网关”,单击页面右上角的“购买公网nat网关”。下图是购买nat网关的案例,请根据实际业务需求填写相关内容。

    购买nat网关,选择vpc和子网时,请确保与cce中运行业务的集群vpc和子网一致。

    图2 购买nat网关
  2. 在管理控制台,在服务列表中选择“网络 > 弹性公网ip”,单击右上角的“购买弹性公网ip”。下图是购买弹性ip的案例,请根据实际业务需求填写相关内容。
    图3 购买弹性公网ip

创建dnat网关类型service

  1. 登录cce控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“服务”,在右上角单击“创建服务”
  3. 设置集群内访问参数。
    • service名称:自定义服务名称,可与工作负载名称保持一致。
    • 访问类型:选择“dnat网关”
    • 命名空间:工作负载所在命名空间。
    • 服务亲和:详情请参见。
      • 集群级别:集群下所有节点的ip 访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源ip。
      • 节点级别:只有通过负载所在节点的ip 访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源ip。
    • 选择器:添加标签,service根据标签选择pod,填写后单击“添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”
    • ipv6:默认不开启,开启后服务的集群内ip地址(clusterip)变为ipv6地址,具体请参见如何通过cce搭建ipv4/ipv6双栈集群?该功能仅在1.15及以上版本的集群创建时开启了ipv6功能才会显示。
    • dnat网关:选择创建nat网关和弹性公网ip中创建的dnat网关实例和弹性公网ip。
    • 端口配置:
      • 协议:请根据业务的协议类型选择。
      • 容器端口:工作负载程序实际监听的端口,需用户确定。nginx程序实际监听的端口为80。
      • 服务端口:容器端口映射到集群虚拟ip上的端口,用虚拟ip访问工作负载时使用,端口范围为1-65535,可任意指定。
  4. 单击“确定”,创建service。

通过kubectl命令行创建

您可以在创建工作负载时通过kubectl命令行设置service访问方式。本节以nginx为例,说明kubectl命令实现集群内访问的方法。

  1. 请参见,使用kubectl连接集群。
  2. 创建并编辑nginx-deployment.yaml以及nginx-nat-svc.yaml文件。

    其中,nginx-deployment.yaml和nginx-nat-svc.yaml为自定义名称,您可以随意命名。

    vi nginx-deployment.yaml

    apiversion: apps/v1
    kind: deployment
    metadata:
      name: nginx
    spec:
      replicas: 1
      selector:
        matchlabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:latest
            name: nginx
          imagepullsecrets:
          - name: default-secret

    以上字段的解释请参见。

    vi nginx-nat-svc.yaml

    apiversion: v1 
    kind: service 
    metadata: 
      name: nginx 
      annotations:
        kubernetes.io/elb.class: dnat
        kubernetes.io/natgateway.id: e4a1cfcf-29df-4ab8-a4ea-c05dc860f554
    spec: 
      loadbalancerip: 10.78.42.242
      ports: 
      - name: service0 
        port: 80 
        protocol: tcp 
        targetport: 80 
      selector: 
        app: nginx 
      type: loadbalancer
    表1 关键参数说明

    参数

    是否必填

    参数类型

    描述

    kubernetes.io/elb.class

    string

    该参数配置为dnat用于对接nat网关服务添加dnat规则。

    kubernetes.io/natgateway.id

    string

    用于指定nat网关id。

    loadbalancerip

    string

    公网弹性ip。

    port

    integer

    对应界面上的访问端口,取值范围为1 ~ 65535。

    targetport

    string

    对应界面上的容器端口,取值范围为1 ~ 65535。

    type

    string

    nat网关服务需要配置为loadbalancer类型。

  3. 创建工作负载。

    kubectl create -f nginx-deployment.yaml

    回显如下表示工作负载开始创建。

    deployment "nginx" created

    kubectl get po

    回显如下,工作负载状态为running,表示工作负载已运行中。

    name                     ready     status             restarts   age
    nginx-2601814895-sf71t   1/1       running            0          8s
  4. 创建服务。

    kubectl create -f nginx-nat-svc.yaml

    回显如下表示服务已创建成功。

    service "nginx-eip" created

    kubectl get svc

    回显如下表示服务访问方式已设置成功。

    name         type        cluster-ip       external-ip   port(s)        age 
    kubernetes   clusterip   10.247.0.1               443/tcp        3d 
    nginx-nat    loadbalancer 10.247.226.2  10.154.74.98   80:30589/tcp  5s
  5. 在浏览器中输入访问地址,例如为10.154.74.98:80访问地址。

    其中10.154.74.98为弹性ip地址,80为上一步中获取的节点端口号。

分享:
网站地图