k8s 之service資源介紹(三)

kubernetes service資源

apiVersion: v1
kind: Service
metadata:
    name: kubia
spec:
    ports:
    - port: 80
       targetPort: 8080
    selector:
       app: kubia
kubectl get svc
 
kubectl exec kubia-id -- curl -s http://service_ip
雙橫缸表明着kubectl 命令項的結束,下面的是容器內部執行的命令
apiVersion: v1
kind: Service
metadata:
    name: kubia
spec:
    sessionAffinity: ClientIP
sessionAffinity屬性默認爲None,ClientIP 是保證特定客戶端產生的請求每次都指向同一個pod
apiVersion: v1
kind: Service
metadata:
    name: kubia
spec:
    ports:
    - name: http
       port: 80
       targetPort: 8080
    - name: https
       port: 443
       target: 8443
    selector:
       app: kubia
標籤選擇器應用於整個服務,不能對每一個端口作單獨的配置
 
上面是採用端口號進行映射,還有一種方式給端口命名,這樣在作映射的時候直接指向名稱。好處是pod的端口隨便改,而不用改service的配置以下:
kind: Pod
metadata:
   name: kubia
spec:
   containers:
   - name: kubia
      ports:
          - name: http
             containerPort: 8080
          - name: https
             containerPort: 8443

apiVersion: v1
kind: Service
spec:
    ports:
    - name: http
       port: 80
       targetPort: http
    - name: https
       port: 443
       targetPort: https
     selector:
         app: kubia
kubectl delete po --all 刪除全部pod ,而無論pod的id
kubectl delete all --all all表明全部資源,--all表明全部資源對象
 
backend-database.default.svc.cluster.local
backend-database 服務名稱
default 命名空間
svc.cluaster.local是在全部集羣本地服務名稱中使用的可配置集羣域後綴
 
 
kubectl exec -ti kubia-3inly bash 運行bash很像 docker exec -ti id bash
不要ping kubernetes中建立的服務名稱,這是由於服務的ip是一個虛擬的IP,只有在與服務端口結合時纔有意義
 
 
endpoint資源
kubernetes service不只能夠暴露pod給外部,一樣也能夠把外部服務建立爲服務讓內部pod進行訪問。服務並非和pod直接相連的,有一種資源-endpoint介於二者之間。
endpoint資源就是暴露一個服務的IP地址和端口的列表,endpoint資源和其餘kubernetes資源同樣,因此可使用kubectl info 來獲取它的基本信息
kubectl describe svc kubia 執行此命令能看到endpoint資源
kubectl get endpoints kubia
我知道在建立service時定義了selector pod選擇器,但在重定向傳入鏈接時不會直接使用它。
選擇器用於構建IP和端口列表,而後存儲在EndPoint資源中。當客戶端鏈接到服務時,服務代理選擇這些IP和端口對中的一個,並將傳入鏈接重定向到該位置監聽的服務器。
 
EndPoint是一個單獨的資源,而不是service的屬性,因此咱們能夠單獨的建立endpoint資源對象。
咱們在建立service時不聲明pod選擇器就不會建立endpoint
apiVersion: v1
kind: Service
metadata:
    name: external-service 
spec:
    ports:
    - port: 80
這裏並無定義selector
下面咱們手動建立endpoint
apiVersion: v1
kind: Endpoints
metadata:
    name: external-service   這裏的名稱必定和service的一致
subsets:
-   addresses:
    - ip: 1.1.1.1
    - ip: 2.2.2.2
ports:
-   port: 80 這裏的port是endpoint的目標端口,是service中的targetPort
以上就作了一個將外部服務經過service讓內部pod能夠訪問。
 
還有一種簡單的方式,給外部服務建立一個別名服務。
apiVersion: v1
kind: Service
matedata:
    name: external-service
spec:
    type: ExternalName     代碼的type被設置成ExternalName
    externalName:  someapi.somecompany.com 實際服務的徹底限定名
    ports:
      - port: 80
內部就可使用external-service來訪問服務了
 
 
kubectl get po --all-namespaces 很是好用
相關文章
相關標籤/搜索