You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Podman中如何解析通过Kubernetes YAML部署的Pod主机名?

Podman Kube Play部署Pod后主机名无法解析的问题

问题描述

我正在使用Podman 4.5-dev版本,通过podman kube play foo.yaml和podman kube play bar.yaml命令部署了两个Pod。我在YAML文件中指定了Pod的主机名,但容器内部无法解析这些主机名。已确认两个Pod处于同一网络中,想问是否缺少某些DNS配置?是否需要使用Service?官方文档对此主题缺乏明确说明。

Pod YAML配置示例

其中一个Pod的YAML配置如下(另一个Pod仅部分值不同):

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: postgres
  name: postgres
spec:
  hostname: postgres
  containers:
  - name: pgadmin-container
    image: docker.io/dpage/pgadmin4:latest
    ports:
    - containerPort: 80
      hostPort: 9876

相关终端输出

[daniele@localhost]$ podman pod inspect xptssrv |grep -ni network
25:          "HostNetwork": false,
34:          "Networks": [
35:               "podman-default-kube-network"
37:          "NetworkOptions": null,

[daniele@localhost]$ podman pod inspect postgres |grep -ni network
25:          "HostNetwork": false,
34:          "Networks": [
35:               "podman-default-kube-network"
37:          "NetworkOptions": null,

[daniele@localhost]$ podman network inspect podman-default-kube-network |grep "" -n
1:[
2:     {
3:          "name": "podman-default-kube-network",
4:          "id": "a4dcf21f020ee4e36651c11256cbe884182552e835eaaafd409153cd21dca4cc",
5:          "driver": "bridge",
6:          "network_interface": "cni-podman1",
7:          "created": "2023-02-21T23:03:25.800256942+01:00",
8:          "subnets": [
9:               {
10:                    "subnet": "10.89.0.0/24",
11:                    "gateway": "10.89.0.1"
12:               }
13:          ],
14:          "ipv6_enabled": false,
15:          "internal": false,
16:          "dns_enabled": false,
17:          "ipam_options": {
18:               "driver": "host-local"
19:          }
20:     }
21:]

[daniele@localhost pods]$ podman exec  xptssrv-xptssrv-container cat /etc/resolv.conf 
nameserver 192.168.1.6
nameserver 8.8.8.8

问题分析与解决方案

从终端输出能看到核心问题:podman-default-kube-network的dns_enabled字段为false,这意味着该网络未启用内置DNS服务,容器自然无法通过Pod主机名完成解析。

解决步骤:

  1. 删除现有默认kube网络:
    podman network rm podman-default-kube-network
    
  2. 重新创建启用DNS的kube网络:
    podman network create --driver bridge --dns-enable podman-default-kube-network
    
  3. 重新部署Pod:
    再次执行podman kube play命令部署两个Pod,此时网络会提供DNS解析能力,Pod的主机名就能被容器正常解析。

关于Service的说明

在Kubernetes中,Service主要用于提供稳定的DNS名称和负载均衡,但在Podman的kube play场景下,如果只是需要Pod间通过主机名解析,启用网络的DNS功能就足够,无需额外创建Service。不过如果后续需要更灵活的服务发现或负载均衡,Service依然是可行的选择。


内容的提问来源于stack exchange,提问作者Daniele Navarra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:53:19