我正在学习 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 集群工作吗?
完全不推荐这种设置。
假设您使用
helm
安装了数据库:
helm repo add my-repo https://charts.bitnami.com/bitnami
helm install my-release my-repo/postgresql
更好的方法是:
global.postgresql.auth.postgresPassword
global.postgresql.auth.username
global.postgresql.auth.password
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
提供数据库并设置专用用户和密码,并且只授予给定客户端所需的最小访问权限。