ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在开发阶段或是临时应用,如果想要外部客户端访问集群服务,最常用的方式就是 NodePort Service。 NodePort Service 是在 ClusterIP Service 的基础上,为 Service 在集群所有 Node 节点上绑定一个端口,外部客户端通过`nodeIP:nodePort`就可以访问服务。 在定义 YAML 文件时需要: * `spec.type`: 设置值为 NodePort * `spec.ports.nodePort`: 设置在 Node 节点上开发的端口号 在`/home/shiyanlou`目录下新建`nginx-deployment.yaml`文件,并向其中写入如下代码: ~~~yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 # 指定开放 80 端口 ~~~ 执行创建: ~~~bash $ kubeclt create -f nginx-deployment.yaml deployment.apps/nginx created ~~~ 在`/home/shiyanlou`目录下新建`nginx-service-nodeport.yaml`文件,并向其中写入如下代码: ~~~yaml apiVersion: v1 kind: Service metadata: name: nginx-service-nodeport spec: type: NodePort ports: - port: 80 # 设置 ClusterIP 对应的端口为 80 targetPort: 80 # Pod 开放的端口为 80 nodePort: 31000 # 设置在 Node 上开放的端口为 31000 selector: app: nginx ~~~ 注意:nodePort 的默认范围为 30000-32767,我们设置的时候也需要在这个范围之内。 执行创建: ~~~bash $ kubectl create -f nginx-service-nodeport.yaml service/nginx-service-nodeport created # CLUSTER-IP 的值为 10.110.152.192,PORT(S) 表示集群 IP(80 端口)和 node 端口(31000) $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-nodeport NodePort 10.110.152.192 <none> 80:31000/TCP 15s ~~~ 那么现在外部客户端可以通过`nodeIP:nodePort`访问服务: ~~~bash # 这里访问的是 kube-node-1 节点,大家也可以用其它节点测试:10.192.0.2:31000、10.192.0.4:31000 shiyanlou:~/ $ curl 10.192.0.3:31000 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> ... ~~~ 也可以在集群内部使用`clusterIP:port`访问服务: ~~~bash shiyanlou:~/ $ docker exec -it kube-node-1 bash root@kube-node-1:/# curl 10.110.152.192 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> ... ~~~ 在使用 nodePort Service 时,需要注意: * node 每个端口只能提供一个服务 * 如果 node IP 地址发生变化,访问的地址也要随之发生改变