1. 程式人生 > 其它 >|NO.Z.00161|——————————|CloudNative|——|KuberNetes&服務釋出.V12|-------------------------------------------------------|service.v04|service常用型別|

|NO.Z.00161|——————————|CloudNative|——|KuberNetes&服務釋出.V12|-------------------------------------------------------|service.v04|service常用型別|



[CloudNative:KuberNetes&服務釋出.V12]                                                               [Applications.KuberNetes] [在k8s中如何釋出服務|service|使用service代理k8s外部服務|使用service反代外部域名|service常用型別|]








一、service常用型別:service型別一:ClusterIP:在叢集內部使用,也是預設值。
### --- 型別一:ClusterIP:在叢集內部使用,也是預設值。

~~~     這個service的地址,在安裝的時候不要和公司的網段去重複。
~~~     還有Pod的網段是不建議去重複。
~~~     這個service的地址是基於k8s叢集內部去管理的,外部網路是不可以訪問的。
~~~     在node節點是可以訪問的,pod也是可以訪問的,但是k8s外部網路是不可以訪問的。
[root@k8s-master01 ~]# kubectl get svc
NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
kubernetes           ClusterIP      10.96.0.1       <none>          443/TCP          11d
二、service型別二:ExternalName:通過返回定義的CNAME別名。
### --- 型別二:ExternalName:通過返回定義的CNAME別名。

~~~     在這個ExternalName定義了一個外部的域名,
~~~     解析這個名稱nginx-externalname就可以解析到ExternalName對應的dns記錄。
~~~     然後就可以訪問到它了www.baidu.com
[root@k8s-master01 ~]# cat nginx-externalName.yaml 
    app: nginx-externalname
  name: nginx-externalname
spec:
  type: ExternalName
  externalName: www.baidu.com
[root@k8s-master01 ~]# kubectl get svc     
nginx-externalname   ExternalName   <none>          www.baidu.com   <none>           17m
三、service型別三:NodePort:kube-proxy的節點代理埠
### --- 型別三:NodePort:在所有安裝了kube-proxy的節點上開啟一個埠,此埠可以代理至後端Pod,
~~~     # 然後叢集外部可以使用節點的IP地址和NodePort的埠號訪問到叢集Pod的服務。
~~~     # NodePort埠範圍預設是30000-32767。

~~~     這個dashboard在建立的時候會建立一個service,這個service的型別是NodePort,
~~~     它會會做一個對映,就是在安裝了kube-proxy的節點上都會啟動一個埠;30000埠
~~~     就是在宿主機上打開了一個埠,這個埠就可以到k8s內部的k8s-service,
~~~     這樣就可以通過任何一個宿主機的IP地址,加上埠號就可以訪問到我們的服務。
~~~     我們通過這個就可以訪問到:https://192.168.1.20:30008/ 
~~~     這個埠可以在apiserver的配置檔案中檢視到
### --- 檢視svc對應的地址及埠

[root@k8s-master01 ~]# kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.103.18.41    <none>        8000/TCP        11d
kubernetes-dashboard        NodePort    10.104.232.53   <none>        443:30008/TCP   11d
[root@k8s-master01 ~]# netstat -antp |grep 30008
tcp        0      0 0.0.0.0:30008           0.0.0.0:*               LISTEN      19452/kube-proxy 
### --- 檢視kube-apiserver.service地址範圍
~~~     比如之前有一個service,只能在k8s內部去訪問, 我們配置更改為外部網路也是可以訪問

[root@k8s-master01 ~]# cat /usr/lib/systemd/system/kube-apiserver.service  
      --service-cluster-ip-range=10.96.0.0/12  \
      --service-node-port-range=30000-32767  \     // 這個埠號也是可以更改的
### --- 檢視service地址
~~~     之前這個service只能在k8s內部去訪問,我們可以更改它的型別。並設定為外部網路可以訪問

[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   20h
四、檢視nginx-service配置引數
### --- 檢視nginx-service配置引數
~~~     我們可以通過31000可以訪問到nginx:http://192.168.1.20:31000/:
~~~     輸出:Welcome to nginx!

[root@k8s-master01 ~]# kubectl edit svc nginx-svc
spec:
  clusterIP: 10.101.145.83
  clusterIPs:
  - 10.101.145.83
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 31000          // 且為NodePort指定一個埠號,若是不指定,它會隨機生成一個。
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  sessionAffinity: None
  type: NodePort             // 型別更改為NodePort,
[root@k8s-master01 ~]# kubectl get svc
NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
nginx-svc            NodePort       10.101.145.83   <none>          80:31000/TCP,443:32765/TCP   20h 
### --- 所以說NodePort也是可以訪問到叢集內部的一種方式:

~~~     # 使用場景:
~~~     若是你在k8s內部部署了Redis或者mysql,一般情況下這些服務都不會暴露在外,
~~~     因為在叢集內部訪問筆記安全,但是開發臨時性的需要訪問到叢集內部的Redis或者mysql。
~~~     這個時候可以通過臨時性的建立一個NodePort,讓它訪問一次,訪問完之後可以給他關掉。
~~~     當然不建議給你的應用程式直接暴露一個埠號給別人去訪問的。
~~~     IP地址+埠號:NodePort的效能是不怎麼樣的。
五、service型別四:LoadBalancer:使用雲提供商的負載均衡器公開服務。
### --- 型別四:LoadBalancer:使用雲提供商的負載均衡器公開服務。

~~~     若是你在雲服務上話是支援loadbalancer這個格式,把它的TYPE更改為loadbalancer,
~~~     但是這種使用起來是有成本的。
~~~     用的最多的是clusterIP
[root@k8s-master01 ~]# kubectl get svc
NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
kubernetes           ClusterIP      10.96.0.1       <none>          443/TCP                      11d








===============================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)