k8s service對象

概述

service服務也是Kubernetes裏核心字眼對象之一,Kubernetes裏的每個service其實就是咱們常常提起的微服務架構中的一個微服務,以前講解Pod,RC等資源對象其實都是爲講解Kubernetes Service作鋪墊的,下圖爲Pod,RC與Service的邏輯關係node

 

能夠看到上面的架構圖,service服務經過標籤選擇器定位後端pod,前提是service的selector必須和後端Pod標籤對應上才能找到相對應的Pod,而前段frontend經過service就能夠訪問到後端提供服務的pod了,而service默認IP類型爲主要分爲:nginx

  • ClusterIP:主要是爲集羣內部提供訪問服務的
  • NodePort:能夠被集羣外部所訪問,訪問方式爲    宿主機:端口號

 下面我建立了一個nginx服務和一個對外提供服務的service,以下:docker

[root@master ~]# cat nginx.yaml 
apiVersion: v1
kind: Service
metadata:
  name: serivce-mynginx
  namespace: default
spec:
  type: NodePort
 selector: app: mynginx
  ports:
  - name: nginx
    port: 80
    targetPort: 80
    nodePort: 30080

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy
  namespace: default
spec:
  replicas: 2 selector: matchLabels: app: mynginx
  template:
    metadata:
 labels: app: mynginx
    spec:
      containers:
      - name: nginx
        image: lizhaoqwe/nginx:v1
        ports:
        - name: nginx
          containerPort: 80

執行yaml文件編程

[root@master ~]# kubectl create -f test.yaml 
service/serivce-mynginx created
deployment.apps/deploy created

查看pod和service狀態後端

[root@master ~]# kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
deploy-696bccb9fd-9zk2f   1/1     Running   0          138m
deploy-696bccb9fd-vcgs5   1/1     Running   0          138m


[root@master ~]# kubectl get svc
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.96.0.1       <none>        443/TCP        5d23h
serivce-mynginx   NodePort    10.103.92.182   <none>        80:30080/TCP   138m

驗證api

 

 

外部訪問service的問題

爲了更加深入理解kubernetes,咱們須要弄明白kubernetes裏的3中IP服務器

  • NodeIP:NodeIP是kubernetes中每一個節點的物理網卡IP地址,是一個真實存在的物理網絡,全部屬於這個網絡的服務器都能經過這個網絡直接通信,包括集羣外的主機訪問集羣內的主機也須要NodeIP
  • PodIP:PodIP是每一個Pod地址,它是docker engine根據docker0網橋的IP地址進行分配的,一般是一個虛擬的二層網絡,因此kubernetes裏的一個Pod裏的容器訪問另一個Pod裏的容器時,就是經過PodIP所在的虛擬二層網絡進行通信的,而真實的TCP/IP流量是經過NodeIP所在的物理網卡流出的
  • ClusterIP:他是一個虛擬的IP,但更像是一個「僞造」的IP網絡,緣由有如下幾點:
  1. ClusterIP僅僅做用於kubernetes service這個對象,並由kubernetes管理和分配ip地址
  2. ClusterIP沒法被Ping,由於沒有一個實體網絡對象來響應
  3. ClusterIP只能結合service Port組成一個具體的通信端口,若是集羣外想訪問須要作一些額外的操做
  4. 在kubernets集羣內,NodeIP、PodIP和ClusterIP網之間通信,採用的是kubernets本身設計的一種編程方式的特殊路由規則
相關文章
相關標籤/搜索