kubernetes 暴露服務端口的幾種方式
如果希望将 Service 暴露在一個外部IP位址上。 Kubernetes 支援4種實作方式,詳細如下:
1:叢集内部實作通路:Clusterip
Clusterip是叢集内部的私有ip,在叢集内部通路服務非常友善,也是kuberentes叢集預設的方式,直接通過service的Clusterip通路,也可以直接通過ServiceName通路。叢集外部則是無法通路的。
2:叢集外部方式通路:NodePort
NodePort在kubenretes裡是一個早期廣泛應用的服務暴露方式。Kubernetes中的service預設情況下都是使用的ClusterIP這種類型,這樣的service會産生一個ClusterIP,這個IP隻能在叢集内部通路,要想讓外部能夠直接通路service,需要将service type修改為 nodePort。将service監聽端口映射到node節點。
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
通路測試
在叢集之外,可以通過任何一個node節點的 ip:nodeport 都可以通路叢集中服務
3:LoadBalancer
LoadBlancer Service 是 kubernetes 深度結合雲平台的一個元件;當使用 LoadBlancer Service 暴露服務時,實際上是通過向底層雲平台申請建立一個負載均衡器來向外暴露服務;目前 LoadBlancer Service 支援的雲平台已經相對完善,比如國外的 GCE、DigitalOcean,國内的 阿裡雲,私有雲 Openstack 等等,由于 LoadBlancer Service 深度結合了雲平台,是以隻能在一些雲平台上來使用.