在實際應用中,一般不會把mysql這種重IO、有狀態的應用直接放入k8s中,而是使用專用的服務器來獨立部署。而像web這種無狀態應用依然會運行在k8s當中,這時web服務器要連接k8s管理之外的數據庫,有兩種方式:一是直接連接數據庫所在物理服務器IP,另一種方式就是藉助k8s的Endpoints直接將外部服務器映射爲k8s內部的一個服務。
下面這個例子就是展示Endpoints將外部服務映射爲k8s內部服務的例子。
將外部服務器的172.17.241.47、59.107.26.221的80端口映射到內部服務
cat << EOF > lykops-service.yaml
apiVersion: v1
kind: Service
metadata:
name: lykops
spec:
ports:
- port: 80
targetPort: 81
protocol: TCP
EOF
cat << EOF > lykops-endpoints.yaml
apiVersion: v1
kind: Endpoints
metadata:
name: lykops
subsets:
- addresses:
- ip: 172.17.241.47
- ip: 59.107.26.221
ports:
- port: 80
protocol: TCP
EOF
kubectl create -f test-endpoints.yaml
kubectl create -f test-service.yaml
Endpoints的subsets中指定了需要連接的外部服務器的IP和端口。