gpt4 book ai didi

kubernetes - “istio-init”需要在其他initContainers之前运行

转载 作者:行者123 更新时间:2023-12-02 11:37:23 32 4
gpt4 key购买 nike

在kubernetes集群中使用标准istio部署,我试图将initContainer添加到我的pod部署中,这会执行其他数据库设置。

使用数据库的群集IP也不起作用。但是我可以使用端口转发从计算机连接到数据库。

这个容器非常简单:

    spec:
initContainers:
- name: create-database
image: tmaier/postgresql-client
args:
- sh
- -c
- |
psql "postgresql://$DB_USER:$DB_PASSWORD@db-host:5432" -c "CREATE DATABASE fusionauth ENCODING 'UTF-8' LC_CTYPE 'en_US.UTF-8' LC_COLLATE 'en_US.UTF-8' TEMPLATE template0"
psql "postgresql://$DB_USER:$DB_PASSWORD@db-host:5432" -c "CREATE ROLE user WITH LOGIN PASSWORD 'password';"
psql "postgresql://$DB_USER:$DB_PASSWORD@db-host:5432" -c "GRANT ALL PRIVILEGES ON DATABASE fusionauth TO user; ALTER DATABASE fusionauth OWNER TO user;"

根据我所看到的,这个kubernetes initContainer在“istio-init”容器之前运行。这是为什么它无法将db-host:5432解析为运行postgres服务的Pod的IP的原因吗?

init容器中的错误消息是:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

完全初始化的pod中的相同命令也可以正常工作。

最佳答案

没有Envoy边车,您将无法访问网格内部的服务,您的init容器将单独运行而没有边车。为了从初始化容器访问数据库服务,您需要使用与该数据库的Istio虚拟服务名称不同的ClusterIP服务来公开数据库。

您可以创建一个名为db-direct的服务,例如:

apiVersion: v1
kind: Service
metadata:
name: db-direct
labels:
app: db
spec:
type: ClusterIP
selector:
app: db
ports:
- name: db
port: 5432
protocol: TCP
targetPort: 5432

然后在您的init容器中使用 db-direct:5432

关于kubernetes - “istio-init”需要在其他initContainers之前运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54277698/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com