【发布时间】:2022-01-05 22:15:52
【问题描述】:
我正在创建一个包含多个容器的 POD 文件。一个是网络服务器容器,另一个是我的 PostgreSQL 容器。这是我的 pod 文件,名为 simple.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2022-01-01T16:28:15Z"
labels:
app: eltask
name: eltask
spec:
containers:
- name: el_web
command:
- ./entrypoints/entrypoint.sh
env:
- name: PATH
value: /usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: TERM
value: xterm
- name: container
value: podman
- name: RUBY_MAJOR
value: "2.7"
- name: BUNDLE_SILENCE_ROOT_WARNING
value: "1"
- name: BUNDLE_APP_CONFIG
value: /usr/local/bundle
- name: LANG
value: C.UTF-8
- name: RUBY_VERSION
value: 2.7.2
- name: RUBY_DOWNLOAD_SHA256
value: 1b95ab193cc8f5b5e59d2686cb3d5dcf1ddf2a86cb6950e0b4bdaae5040ec0d6
- name: GEM_HOME
value: /usr/local/bundle
image: docker.io/hmtanbir/elearniotask
ports:
- containerPort: 3000
hostPort: 3000
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
privileged: false
readOnlyRootFilesystem: false
seLinuxOptions: {}
tty: true
workingDir: /app
- name: el_db
image: docker.io/library/postgres:10-alpine3.13
env:
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: TERM
value: xterm
- name: container
value: podman
- name: PG_MAJOR
value: "10"
- name: PG_VERSION
value: "10.17"
- name: PGDATA
value: /var/lib/postgresql/data
- name: LANG
value: en_US.utf8
- name: PG_SHA256
value: 5af28071606c9cd82212c19ba584657a9d240e1c4c2da28fc1f3998a2754b26c
- name: POSTGRES_PASSWORD
value: password
args:
- postgres
command:
- docker-entrypoint.sh
ports:
- containerPort: 5432
hostPort: 9876
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
privileged: false
readOnlyRootFilesystem: false
seLinuxOptions: {}
tty: true
workingDir: /
dnsConfig: {}
restartPolicy: Never
status: {}
我在3000:3000 端口运行一个网络服务器容器,数据库容器端口是9876:5432。
但是当我使用 PODMAN podman play kube simple.yaml 运行 cmd 时,DB 容器正在运行 127.0.0.0:9876 但 webserver 无法连接到 DB 服务器。
我的网络服务器数据库配置:
ELTASK_DATABASE_HOST=localhost
ELTASK_DATABASE_PORT=9876
ELTASK_DATABASE_USERNAME=postgres
ELTASK_DATABASE_PASSWORD=password
如果我在没有 Podman 的情况下运行网络服务器,服务器可以使用9876 端口连接到数据库。
那么,为什么网络服务器在通过 Podman 运行时无法连接到数据库容器?
【问题讨论】:
-
如果postgres只需要从el_web容器访问,我觉得可以去掉- containerPort: 5432 hostPort: 9876 protocol: TCP。例如,请参阅 example 中的 The Pod Spec 部分
-
创建裸 Pod 或在 Pod 中放置多个容器通常都不是最佳实践。您可以为您的应用程序运行一个部署,为数据库运行一个单独的 StatefulSet,并为每个服务运行一个匹配的服务吗?
-
@ErikSjölund 谢谢,现在我的 pod 正在工作。
标签: kubernetes podman