如何在 kubenetes 环境中通过 ssh 隧道使用 dockerized 数据库?

问题描述 投票:0回答:1

我正在学习 kubernetes(使用 microk8s)并尝试在 k8s 集群(在本地计算机上)中使用 postgresql。

我发现与官方postgres图像的区别之一是它需要设置密码:

POSTGRES_密码

这个环境变量是 required 你使用 PostgreSQL image... 这个环境变量 为 PostgreSQL 设置超级用户密码...

注1:PostgreSQL镜像在本地设置信任认证,所以 您可能会注意到连接时不需要密码 本地主机(在同一容器内)。但是,密码将是 如果从不同的主机/容器连接则需要。

但是,我通常不在 postgres 中使用密码,因为我主要在本地主机上使用它。在 docker/microk8s 环境之外,我想我可以通过 SSH 隧道进入 postgres 服务器并避免使用密码。但我对 microk8s 或如何对 microk8s 托管容器做同样的事情知之甚少。因此这里的问题

问题:

如何在 dockerized MySQL(或 postgres)中设置 SSH 隧道,以便它可以在 k8s/microk8s 集群中使用?

到目前为止尝试了什么

我找到了一个 git repo SSH 隧道作为 Kubernetes 服务。我试过了,但我显然遗漏了作者隐含假设的一些步骤。我在示例中尝试了以下内容:

$./ssh-client.py 3306:internal-mysql.example.com:3306 [email protected] ~/.ssh/id_rsa ssh-tunnel-service-mysql
$ microk8s.kubectl apply -f ssh-tunnel-service-mysql.yaml
service/ssh-tunnel-service-mysql created
configmap/ssh-tunnel-service-mysql created
deployment.apps/ssh-tunnel-service-mysql created

但是豆荚似乎有一些错误:

$ microk8s.kubectl get pods
NAME                                        READY   STATUS             RESTARTS        AGE
ssh-tunnel-service-mysql-7d7f7c6899-tm9fj   0/1     CrashLoopBackOff   8 (4m10s ago)   20m

$ microk8s.kubectl logs ssh-tunnel-service-mysql-7d7f7c6899-tm9fj
ssh: Could not resolve hostname bastion-host.example.com: Name does not resolve

我是 microk8s 的新手,按照 Getting Started 的官方文档,在 Ubuntu 22.04 上只有一个全新的设置。我想我可能遗漏了几个重要的插件,并且可能遗漏了示例中暗示的构建/导入 MySQL 映像的步骤(我打算用 postgres 替换它)。大概只有这样,开头说的ssh-tunnel服务才可以用

任何人都可以帮助解释缺少的步骤,以使链接的 git repo 为具有 ssh-tunnel 服务的最小 MySQL 集群工作吗?

docker kubernetes ssh ssh-tunnel
1个回答
0
投票

完全不推荐这种设置。

假设您使用

helm
安装了数据库:

helm repo add my-repo https://charts.bitnami.com/bitnami
helm install my-release my-repo/postgresql

更好的方法是:

  1. 在安装过程中设置密码(例如,如果使用来自 https://artifacthub.io/packages/helm/bitnami/postgresql 的 helm chart,您可以使用以下值来覆盖管理员密码以及通过设置创建自定义用户:
global.postgresql.auth.postgresPassword
global.postgresql.auth.username
global.postgresql.auth.password
  1. 使用本地端口转发进行开发
kubectl port-forward --namespace default svc/my-release-postgresql 5432:5432

和以下命令从您的集群中检索密码并通过本地 psql 客户端连接(确保相应地更改发布名称):

export POSTGRES_PASSWORD=$(kubectl get secret --namespace default my-release-postgresql -o jsonpath="{.data.postgres-password}" | base64 -d)

PGPASSWORD="$POSTGRES_PASSWORD" psql --host 127.0.0.1 -U postgres -d postgres -p 5432

对于生产,您应该通过

Service
提供数据库并设置专用用户和密码,并且只授予给定客户端所需的最小访问权限。

© www.soinside.com 2019 - 2024. All rights reserved.