节点访问(nodeport)-九游平台
操作场景
节点访问 ( nodeport )是指在每个节点的ip上开放一个静态端口,通过静态端口对外暴露服务。创建nodeport服务时,kubernetes会自动创建一个集群内部ip地址(clusterip),集群外部的客户端通过访问
约束与限制
- “节点访问 ( nodeport )”默认为vpc内网访问,如果需要使用弹性ip通过公网访问该服务,请提前在集群的节点上绑定弹性ip。
- 创建service后,如果服务亲和从集群级别切换为节点级别,连接跟踪表将不会被清理,建议用户创建service后不要修改服务亲和属性,如需修改请重新创建service。
- cce turbo集群中,仅当service的后端对接使用主机网络(hostnetwork)的pod时,亲和级别支持配置为节点级别。
- vpc网络模式下,当某容器a通过nodeport类型服务发布时,且服务亲和设置为节点级别(即externaltrafficpolicy为local),部署在同节点的容器b将无法通过节点ip nodeport访问容器a。
- v1.21.7及以上的集群创建的nodeport类型服务时,节点上的nodeport端口默认不会用netstat显示:如果集群转发模式为iptables,可使用iptables -t nat -l查看端口;如果集群转发模式为ipvs,可使用ipvsadm -ln查看端口。
创建nodeport类型service
- 登录cce控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“服务”,在右上角单击“创建服务”。
- 设置集群内访问参数。
- service名称:自定义服务名称,可与工作负载名称保持一致。
- 访问类型:选择“节点访问”。
- 命名空间:工作负载所在命名空间。
- 服务亲和:详情请参见。
- 集群级别:集群下所有节点的ip 节点端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源ip。
- 节点级别:只有通过负载所在节点的ip 节点端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源ip。
- 选择器:添加标签,service根据标签选择pod,填写后单击“确认添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。
- ipv6:默认不开启,开启后服务的集群内ip地址(clusterip)变为ipv6地址,具体请参见如何通过cce搭建ipv4/ipv6双栈集群?。该功能仅在1.15及以上版本的集群创建时开启了ipv6功能才会显示。
- 端口配置:
- 协议:请根据业务的协议类型选择。
- 服务端口:service使用的端口,端口范围为1-65535。
- 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx默认使用80端口。
- 节点端口:即nodeport,建议选择“自动生成”;也可以指定端口,默认范围为30000-32767。
- 单击“确定”,创建service。
kubectl命令行创建
您可以通过kubectl命令行设置service访问方式。本节以nginx为例,说明kubectl命令实现节点访问的方法。
- 请参见,使用kubectl连接集群。
- 创建并编辑nginx-deployment.yaml以及nginx-nodeport-svc.yaml文件。
其中,nginx-deployment.yaml和nginx-nodeport-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-nodeport-svc.yaml
apiversion: v1 kind: service metadata: labels: app: nginx name: nginx-nodeport spec: ports: - name: service nodeport: 30000 # 节点端口,取值范围为30000-32767 port: 8080 # 访问service的端口 protocol: tcp # 访问service的协议,支持tcp和udp targetport: 80 # service访问目标容器的端口,此端口与容器中运行的应用强相关,如本例中nginx镜像默认使用80端口 selector: # 标签选择器,service通过标签选择pod,将访问service的流量转发给pod,此处选择带有 app:nginx 标签的pod app: nginx type: nodeport # service的类型,nodeport表示在通过节点端口访问
- 创建工作负载。
kubectl create -f nginx-deployment.yaml
回显如下,表示工作负载已创建完成。
deployment "nginx" created
kubectl get po
回显如下,工作负载状态为running,表示工作负载已处于运行状态。
name ready status restarts age nginx-2601814895-qhxqv 1/1 running 0 9s
- 创建服务。
kubectl create -f nginx-nodeport-svc.yaml
回显如下,表示服务开始创建。
service "nginx-nodeport" created
kubectl get svc
回显如下,表示服务已创建完成。
# kubectl get svc name type cluster-ip external-ip port(s) age kubernetes clusterip 10.247.0.1
443/tcp 4d8h nginx-nodeport nodeport 10.247.30.40 <none> 8080:30000/tcp 18s - 访问service。
默认情况下,nodeport类型service可以通过任意节点ip:节点端口访问。
在集群同vpc下或集群容器内都可以访问,如果给节点绑定公网ip,也可以使用公网ip访问。如下所示,在集群上创建一个容器,从容器中使用节点ip:节点端口访问。
# kubectl get node -owide name status roles age internal-ip external-ip os-image kernel-version container-runtime 10.100.0.136 ready
152m 10.100.0.136 centos linux 7 (core) 3.10.0-1160.25.1.el7.x86_64 docker://18.9.0 10.100.0.5 ready 152m 10.100.0.5 centos linux 7 (core) 3.10.0-1160.25.1.el7.x86_64 docker://18.9.0 # kubectl run -i --tty --image nginx:alpine test --rm /bin/sh if you don't see a command prompt, try pressing enter. / # curl 10.100.0.136:30000 welcome to nginx! if you see this page, the nginx web server is successfully installed and working. further configuration is required.
for online documentation and support please refer to .
commercial support is available at .thank you for using nginx.
/ #
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨