目 录CONTENT

文章目录
Go

k8s 集群内部Pod互相通信实操

Hello!你好!我是村望~!
2024-07-17 / 0 评论 / 3 点赞 / 449 阅读 / 421 字
温馨提示:
我不想探寻任何东西的意义,我只享受当下思考的快乐~

在之前的 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

image-20240717140302046

可以看到启动成功的日志!

访问一些路由试试

image-20240717140529407

可以进入到 k8s-mysql的 Pod 终端看看数据库,是否已经通信交互成功!

image-20240717140825456

3

评论区