k8s中引入外部服务

简单记录下k8s中如何使用外部有状态服务,如mysql。

一、需求

在工作中,总会遇到这种情况:k8s环境中跑着各种程序接口,有状态服务如mysql,部署在物理机上,那么如果此时,程序接口需要访问数据库,一般有如下几种方式:

  • 通过设置程序部署文件中的 HostAliases 字段,来解析到数据库地址。(不建议,如果应用程序较多,需要每个程序部署文件都要指定 HostAlias)
  • 手动创建无头服务及endpoint,引入外部数据库,然后通过k8s集群中的域名解析服务访问,访问的主机名格式为:[svc_name].[namespace_name].svc.cluster.local
  • 通过k8s中service的externel name功能实现,具体实现方法暂时没研究,后续补充。

二、通过无头服务实现

个人推荐使用无头服务,使用传统的
假设我这里外部mysql地址为:192.168.20.2:3306,那么对应的svc及endpoint配置文件应该如下:

# yml文件内容如下(service和endpoint名字要相同,属于同一个名称空间)
$ 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: 192.168.20.2
ports:
- name: mysql
port: 3306
protocol: TCP
EOF
# 创建service及endpoint
$ kubectl apply -f mysql_svc.yml

查看创建的svc及endpoint如下:

enter description here

k8s集群中启动一个centos容器进行验证:

$ cat > cenots.yml << EOF
apiVersion: v1
kind: Pod
metadata:
name: cdh-master
labels:
role: cdh6.3
spec:
containers:
- name: centos7-1
image: registry.cn-hangzhou.aliyuncs.com/dragon8512/centos7jdk8ssh:v1
ports:
- containerPort: 22
hostPort: 50022
protocol: TCP
EOF
# ports 字段非必须
# 创建pod
$ kubectl apply -f cenots.yml

进入容器访问数据库进行测试:

enter description here

OK。。。

posted @   吕振江  阅读(2128)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示

目录导航