在之前的 K8s 学习中
我自己搞了一个 golang 的 web 服务器,一个 MySQL 的pod 一个 Redis 的pod
刚好 web 服务器 有和 MySQL Redis 做交互需要通讯的部分!
下面就来记录一下K8s 集群之间是如何通信的。
因为是web需要和 MySQL + Redis 进行连接通信
我们先来看看 MySQL + Redis 的 service 配置:
k8s-redis-service
apiVersion: v1
kind: Service
metadata:
name: we-book-redis-service
spec:
selector:
app: we-book-redis
ports:
- protocol: TCP
port: 16379
targetPort: 6379
nodePort: 30003
type: NodePort
k8s-mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: wee-book-mysql-service
spec:
selector:
app: we-book-mysql
ports:
- protocol: TCP
port: 13306
targetPort: 3306
nodePort: 30001
type: NodePort
然后 go web
容器可以直接和其他集群内的service
通过指定 metadata name
+集群内的端口 进行连接
wee-book-mysql-service:13306
we-book-redis-service:16379
func InitDB() (*gorm.DB, error) {
db, err := gorm.Open(mysql.Open("root:root@tcp(wee-book-mysql-service:13306)/webook"))
if err != nil {
return nil, ErrRedisConnect
}
db.AutoMigrate(&models.User{})
return db, nil
}
func InitRedisDB() (*redis.Client, error) {
client := redis.NewClient(&redis.Options{
Addr: "we-book-redis-service:16379",
Password: "", // 没有密码设置 no password set
DB: 0, // 默认 db use default DB
})
if err := client.Ping(context.Background()).Err(); err != nil {
return nil, ErrRedisConnect
}
return client, nil
}
如果你之前已经基于之前版本的镜像启动过web应用,如果做了修改,则需要重新打包,删除之前的pod
kubectl delete service we-book kubectl delete deployment we-book
然后 重新apply启用 Pod
kubectl apply -f k8s-we-book-deployment.yaml kubectl apply -f k8s-we-book-service.yaml
可以看到启动成功的日志!
访问一些路由试试
可以进入到 k8s-mysql的 Pod 终端看看数据库,是否已经通信交互成功!
评论区