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