当前位置:  首页>> 技术小册>> Kubernets合辑6-服务发现

像MySQL集群这种对性能要求很高的有状态应用,并不是很推荐在Kuberentes中部署,业务程序想要使用集群外部的MySQL实例可以通过配置文件或者环境变量指定MySQL地址。

为了统一集群内服务访问方式,部分公司会使用Kubernetes中SVC去代理集群外中间件流量,这样访问集群外中间件就如同访问集群的中间件。实现方式很简单,只需要指定SVC和对应Endpoint,并且Endpoint的后端节点为集群外的中间件访问地址和端口。

  1. ---
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: rds-devops-01
  6. namespace: default
  7. spec:
  8. ports:
  9. - name: mysql
  10. port: 3306
  11. ---
  12. apiVersion: v1
  13. kind: Endpoints
  14. metadata:
  15. # Endpoints 的name必须和Service一致,这样才能关联上
  16. name: rds-devops-01
  17. namespace: default
  18. subsets:
  19. - addresses:
  20. - ip: 10.0.160.11
  21. ports:
  22. - name: mysql
  23. port: 3306
  24. ---
  25. # 用于作为MySQL客户端进行测试
  26. apiVersion: apps/v1
  27. kind: Deployment
  28. metadata:
  29. name: rds-client
  30. namespace: default
  31. spec:
  32. replicas: 1
  33. selector:
  34. matchLabels:
  35. app: rds-client
  36. template:
  37. metadata:
  38. labels:
  39. app: rds-client
  40. spec:
  41. containers:
  42. - name: mysql
  43. image: mysql:5.7
  44. command: ["sleep", "600"]
  1. # 验证是否可以通过SVC去连接集群外部的数据库
  2. [root@maxiaoke nginx-01]# kubectl exec -it rds-client-85d97ddb97-sp24g -- bash
  3. root@rds-client-85d97ddb97-sp24g:/# mysql -u root -p -h rds-devops-01 -e "select version();"
  4. Enter password:
  5. +-----------+
  6. | version() |
  7. +-----------+
  8. | 5.7.35 |
  9. +-----------+

该分类下的相关小册推荐: