如果希望將 Service 暴露在一個(gè)外部IP地址上。 Kubernetes 支持4種實(shí)現(xiàn)方式,詳細(xì)如下:
成都網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù)團(tuán)隊(duì)是一支充滿著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠為客戶提供服務(wù)是我們的理念。創(chuàng)新互聯(lián)把每個(gè)網(wǎng)站當(dāng)做一個(gè)產(chǎn)品來開發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!
Clusterip是集群內(nèi)部的私有ip,在集群內(nèi)部訪問服務(wù)非常方便,也是kuberentes集群默認(rèn)的方式,直接通過service的Clusterip訪問,也可以直接通過ServiceName訪問。集群外部則是無法訪問的。
NodePort在kubenretes里是一個(gè)早期廣泛應(yīng)用的服務(wù)暴露方式。Kubernetes中的service默認(rèn)情況下都是使用的ClusterIP這種類型,這樣的service會(huì)產(chǎn)生一個(gè)ClusterIP,這個(gè)IP只能在集群內(nèi)部訪問,要想讓外部能夠直接訪問service,需要將service type修改為 nodePort。將service監(jiān)聽端口映射到node節(jié)點(diǎn)。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-dm
spec:
replicas: 2
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30004
protocol: TCP
selector:
name: nginx
kubectl create -f nginx-ds.yaml
在集群之外,可以通過任何一個(gè)node節(jié)點(diǎn)的 ip:nodeport 都可以訪問集群中服務(wù)
LoadBlancer Service 是 kubernetes 深度結(jié)合云平臺(tái)的一個(gè)組件;當(dāng)使用 LoadBlancer Service 暴露服務(wù)時(shí),實(shí)際上是通過向底層云平臺(tái)申請創(chuàng)建一個(gè)負(fù)載均衡器來向外暴露服務(wù);目前 LoadBlancer Service 支持的云平臺(tái)已經(jīng)相對完善,比如國外的 GCE、DigitalOcean,國內(nèi)的 阿里云,私有云 Openstack 等等,由于 LoadBlancer Service 深度結(jié)合了云平臺(tái),所以只能在一些云平臺(tái)上來使用.
Ingress是自kubernetes1.1版本后引入的資源類型。必須要部署Ingress controller才能創(chuàng)建Ingress資源,Ingress controller是以一種插件的形式提供。
Ingress 使用比較廣泛的有:nginx 和 traefik,個(gè)人推薦使用traefik。
https://blog.51cto.com/michaelkang/2429929