1. 程式人生 > 其它 >|NO.Z.00156|——————————|CloudNative|——|KuberNetes&服務釋出.V07|-------------------------------------------------------|service.v03|建立service|

|NO.Z.00156|——————————|CloudNative|——|KuberNetes&服務釋出.V07|-------------------------------------------------------|service.v03|建立service|



[CloudNative:KuberNetes&服務釋出.V07]                                                               [Applications.KuberNetes] [|DevOps|k8s|服務釋出|在k8s中如何釋出服務|service|使用service代理k8s內部服務|]








一、引入service
### --- 什麼是service

~~~     Service可以簡單的理解為邏輯上的一組Pod。
~~~     一種可以訪問Pod的策略,而且其他Pod可以通過這個Service訪問到這個Service代理的Pod。
~~~     相對於Pod而言,它會有一個固定的名稱,一旦建立就固定不變。
~~~     在建立service的時候會同步建立一個同名的EndPoint,這個EndPoint裡面記錄的就是Pod的IP地址
二、檢視部署時建立的service和endpoints
### --- 檢視建立的service

[root@k8s-master01 ~]# kubectl get svc -n kube-system
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
kube-dns         ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   10d
metrics-server   ClusterIP   10.97.177.184   <none>        443/TCP                  10d
### --- 檢視建立的endpoints

[root@k8s-master01 ~]# kubectl get ep -n kube-system
NAME             ENDPOINTS                                           AGE
kube-dns         172.25.92.65:53,172.25.92.65:53,172.25.92.65:9153   10d
metrics-server   172.18.195.1:4443                                   10d
### --- 檢視建立的pod

[root@k8s-master01 ~]# kubectl get po -n kube-system -owide
NAME                                       READY   STATUS    RESTARTS   AGE   IP             NODE           NOMINATED NODE   READINESS GATES
coredns-867d46bfc6-sk5dp                   1/1     Running   0          10d   172.25.92.65   k8s-master02   <none>           <none>
metrics-server-595f65d8d5-slhtd            1/1     Running   1          10d   172.18.195.1   k8s-master03   <none>           <none>
三、建立nginx-service.yaml配置檔案
### --- 匯出service歷史建立模板更改配置引數
~~~     假設新建一個service驗證:可以使用正在執行的service,匯出來yaml檔案,建立即可

[root@k8s-master01 ~]# kubectl get svc -n kube-system
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
kube-dns         ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   10d
metrics-server   ClusterIP   10.97.177.184   <none>        443/TCP                  10d
### --- 匯出歷史service模板

[root@k8s-master01 ~]# kubectl get svc -n kube-system kube-dns -oyaml > nginx-svc.yaml
### --- 更改配置引數

[root@k8s-master01 ~]# vim nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-svc
  name: nginx-svc
spec:
  ports:
  - name: http                                                                      # Service埠的名稱
    port: 80                                                                        # Service自己的埠, servicea --> serviceb http://serviceb,  http://serviceb:8080 
    protocol: TCP                                                                   # UDP TCP SCTP default: TCP
    targetPort: 80                                                                  # 後端應用的埠
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  sessionAffinity: None
  type: ClusterIP
### --- service配置檔案引數說明

~~~     # 註釋說明;
~~~     clusterIP:在配置的時候不要寫clusterIP,因為clusterIP也是自己去生成的,他和我們Pod的IP是一樣的,這個地址不要手動去配置,自動配置有可能會衝突,所以建立service的時候讓他自己去生成。而且服務間訪問不要使用這個clusterIP,clusterIP在刪除service之後就會發生變化。
~~~     ports:spec下的ports;是你的service中要開放的埠,開放的埠包括2個,一個是service自己的埠,另外一個是service代理後端的後端應用的埠,這個是要做一個區分的。埠若是配置多個的話,是不要重複的。最好是按照這個埠的用途來區分的。比如說是nginx
~~~     targetPort:是後端應用的埠。這兩個埠是可以不一樣的。但是targetPort埠一定要寫對,不然可能會導致不通。
~~~     name:根據他的屬性來命名,不要隨便寫。需要認識是什麼引數
~~~     他所代理的Pod是誰,就是通過這個selector來定義的,它是通過這個selector來過濾出來本身namespace下的這個Pod,這個service是有namespace隔離的。
[root@k8s-master01 ~]# vim nginx-svc.yaml
  selector:
    app: nginx
  sessionAffinity: None
  type: ClusterIP
### --- 檢視建立pod所建立的label
~~~     可以看到這2個Pod的標籤是app=nginx,和上面的selector下的app:標籤保持一致即可。
~~~     這樣這個service就可以代理這兩個pod的流量了。

[root@k8s-master01 ~]# kubectl get po --show-labels
NAME                     READY   STATUS    RESTARTS   AGE     LABELS
nginx-66bbc9fdc5-jnzhz   1/1     Running   0          7m37s   app=nginx,pod-template-hash=66bbc9fdc5
nginx-66bbc9fdc5-vhq59   1/1     Running   0          7m37s   app=nginx,pod-template-hash=66bbc9fdc5 
四、建立service;使用service代理k8s內部應用
### --- 建立一個service

[root@k8s-master01 ~]# kubectl create -f nginx-svc.yaml 
service/nginx-svc created
### --- 檢視建立的service
~~~     這個建立的service的IP地址是10.101.145.83     代理的後端應用的埠是80和443

[root@k8s-master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
nginx-svc    ClusterIP   10.101.145.83   <none>        80/TCP,443/TCP   4s








===============================END===============================


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart                                                                                                                                                    ——W.S.Landor



來自為知筆記(Wiz)