kubernetes集群引入外部服务
前提说明
实际工作中,k8s集群中部署各种服务,一些mysql、redis数据库部署在集群外,如果集群内服务想访问数据库的话,需要通过IP地址,k8s集群内部可以通过svc的方式直接访问的,同一个命名空间下直接访问svc即可,不同命令空间的话需要通过k8s集群中的域名解析服务访问,格式: [svc_name].[namespace_name].svc.cluster.local
本文通过创建endpoint引入集群外部mysql数据库
创建SVC
外部mysql地址为:172.23.1.56:3306,那么对应的svc及endpoint配置文件应该如下
#service和endpoint名字要相同,属于同一个名称空间
[root@k8s01 ~]# cat > mysql-svc.yml<< EOF
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: default
spec:
clusterIP: None
ports:
- name: mysql
port: 3306
protocol: TCP
targetPort: 3306
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: mysql
namespace: default
subsets:
- addresses:
- ip: 172.23.1.56
ports:
- name: mysql
port: 3306
protocol: TCP
EOF
#创建service及endpoint
[root@k8s01 ~]# kubectl apply -f mysql-svc.yml
service/mysql created
endpoints/mysql created
[root@k8s01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 41d
mysql ClusterIP None <none> 3306/TCP 15s
[root@k8s01 ~]# kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 10.48.0.161:6443 41d
mysql 172.23.1.56:3306 20s
测试访问
进入其它Pod中进行测试ping或者连接,同一个命令空间使用svc即可,不同命令空间使用mysql.default.svc.cluster.local即可
[root@k8s01 ~]# kubectl exec -it nfs-provisioner-56db4c9574-g5xf8 sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # ping mysql
PING mysql (172.23.1.56): 56 data bytes
64 bytes from 172.23.1.56: seq=0 ttl=60 time=225.751 ms
64 bytes from 172.23.1.56: seq=1 ttl=60 time=129.015 ms
64 bytes from 172.23.1.56: seq=2 ttl=60 time=172.965 ms
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
爱吃可爱多!
喜欢就支持一下吧
打赏
微信
支付宝