K8S使用NodePort類型Service


1、使用nodetype類型

1.1、第一種類型創建:直接在yaml中標記是nodePort

apiVersion: v1
kind: Service
metadata:
  name: nginx-service-nodeport
spec:
  selector:
      app: nginx
  ports:
    - name: http
      port: 8000
      protocol: TCP
      targetPort: 80
    - name: https
      port: 8443
      protocol: TCP
      targetPort: 443
  type: NodePort 

1.1、查詢service進行比較

-1、觀察對比可以看見,在暴露的端口后面跟着一個端口
-2、pod還是上一個步驟創建的pod,並沒有發生任何改變

 

-3、也就是說pod的訪問方式還是可以進行的
 
 

-4、那么創建的service如果進行訪問?
 
 
 
 
 
 
  • service的clusterip可以使用,使用方式serviceClusterIP:port(其他方式都不行),所有的節點都可以通過訪問serviceClusterIP:port進行訪問服務
  • pod的clusterip進行訪問,使用方式podClusterIP:targetport,但是每個節點只能使用自己節點的podClusterIP訪問自己的pod
  • node的ip進行訪問,使用方式nodeIP:nodePort(如果nodePort沒有指定,創建service會自動生成一個)

1.2、使用錯誤說明:

  •  

     

    如果pod在running,但是服務不能訪問,就查看一下service的pod有沒有寫正確
     
     
     
     

2、直接暴露端口,不創建service使用nodetype類型

2.1、創建pod

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
      app: nginx
  ports:
    - name: http
      port: 8000
      protocol: TCP
      targetPort: 80
    - name: https
      port: 8443
      protocol: TCP
      targetPort: 443

2.2、直接暴露端口

kubectl run --port=80(或者kubectl expose --port=80)
kubectl expose deployment nginx-deployment-2 --type=NodePort 
  •  

     

    直接對deployment進行expose,指定暴露類型
     
     
  • 直接expose,會生成一個和deployment一樣名稱的service
  •  

     

    直接expose,不指定暴露的端口,會默認將targetPort(80)暴露到一個隨機的端口(22796)上
     
     
     
     
  •  

     

    依然可以使用serviceIP:targetPort進行服務訪問
     
     
  • 使用方式和修改yaml添加type是完全一樣的
  •  

     

    如果直接expose指定port,會使用你指定的端口去覆蓋你最開始設置的targetPort和port
     
     
  • 以前在進行service創建的時候,port和targetPort可以不一樣,但是如果直接expose就會直接修改port和targetPort,可能導致我們的pod不能訪問,所以在expose的時候,最好不要添加"port=8081"
#最好不使用port=8081參數,會修改port和target導致不能訪問 kubectl expose deployment nginx-deployment-2 --type=NodePort --port=8081 
  •  

     

    創建service時,保持targetPort和containerPort一致,最好也和port一樣,免得生是非
     
     

3、使用nodetype類型總結

1、沒有辦法在外部網絡訪問一個IP直接進行pod負載,只能通過nodeIP:nodePort進行同一個Node上pod的負載訪問
2、沒有辦法訪問一個名稱映射到服務上面
3、最好的方式,創建完deployment之后,直接expose生成service,此時你就不用管你到底要暴露什么port和targetport,系統會自動幫你生成,如果此時你感覺nodePort不是你要的,或者clusterIP不是你要的,你直接edit創建的service即可
4、如果感覺expose有點麻煩,還是想創建service.yaml文件,就直接按照下面模板進行更改即可

apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx-service namespace: default spec: clusterIP: 10.68.232.62(可以手動指定) externalTrafficPolicy: Cluster ports: - name: nginx protocol: TCP port: 80 targetPort: 80 nodePort: 26363(范圍:20000-40000) selector: app: nginx type: NodePort 


作者:糖紙瘋了
鏈接:https://www.jianshu.com/p/75af95641c91
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM