前提说明

实际工作中,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 许可协议。转载请注明来自 爱吃可爱多
Kubernetes Kubernetes
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝