1. NodePort:对外暴露应用(集群外)
-
NodePort:在每个节点上启用一个端口来暴露服务,可以在集群
- 外部访问。也会分配一个稳定内部集群IP地址。
- 访问地址:<任意NodeIP>:
- 端口范围:30000-32767
-
示例代码:
apiVersion: v1 kind: Service metadata: labels: app: web name: web spec: type: NodePort # 服务类型 ports: - port: 80 # Service端口 protocol: TCP # 协议 targetPort: 80 # 容器端口 nodePort: 30001 # 对外暴露的端口,可以指定 selector: app: web # 指定关联Pod的标签
-
示例图片
-
NodePort:
会在每台Node上监听端口接收用户流量,在实际情况下,对用户暴露的只会有一个IP和端口,那这么多台Node该使用哪台让用户访问呢?
这时就需要前面加一个公网负载均衡器为项目提供统一访问入口了。
-
示例图片
2. 案例
-
我们先启动一个pod容器
[root@k8s-master deployment]# vim web.yaml [root@k8s-master deployment]# cat web.yaml apiVersion: apps/v1 kind: Deployment metadata: name: web namespace: default annotations: # 记录回滚参数 kubernetes.io/change-cause: "web.v1-nginx-1.19" #记录到revision中的内容,记录版本号 spec: replicas: 3 # Pod副本预期数量 revisionHistoryLimit: 10 # RS历史版本保存数量 selector: matchLabels: app: web strategy: rollingUpdate: maxSurge: 25% # 滚动更新过程最大pod副本数 maxUnavailable: 25% # 滚动更新过程中最大不可用pod副本数, type: RollingUpdate template: metadata: labels: app: web # Pod副本的标签 spec: containers: - name: web image: nginx:1.16 readinessProbe: # 存活检查,如果失败,将杀死容器,来重启 httpGet: port: 80 path: /index.html initialDelaySeconds: 10 #启动容器后多少秒健康检查 periodSeconds: 10 #以后间隔多少秒检查一次 livenessProbe: # 就绪检查,失败就会剔除 service httpGet: port: 80 path: /index.html
-
启动pod服务
[root@k8s-master deployment]# kubectl apply -f web.yaml deployment.apps/web unchanged
-
使用service服务,暴露web应用
[root@k8s-master service]# vim web-NodePort.yaml [root@k8s-master service]# cat web-NodePort.yaml apiVersion: v1 kind: Service metadata: labels: app: web name: web spec: type: NodePort # 服务类型 ports: - port: 80 # Service端口 protocol: TCP # 协议 targetPort: 80 # 容器端口 nodePort: 30009 # 对外暴露的端口,可以指定 selector: app: web # 指定关联Pod的标签
-
启动服务
[root@k8s-master service]# kubectl apply -f web-NodePort.yaml service/web configured
-
查询服务
[root@k8s-master service]# kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d19h probe-demo ClusterIP 10.104.161.168 <none> 80/TCP 3d19h web NodePort 10.100.222.42 <none> 80:30009/TCP 13h
-
验证服务
[root@k8s-master service]# curl -I http://192.168.0.202:30009 HTTP/1.1 200 OK Server: nginx/1.16.1 Date: Thu, 03 Dec 2020 03:10:36 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 13 Aug 2019 10:05:00 GMT Connection: keep-alive ETag: "5d528b4c-264" Accept-Ranges: bytes