私はRHEL8.6でpodmanを使用して、2つのコンテナ(zabbix-serverとpostgres-server)で構成されたPodをデプロイします。コンテナを展開するには、podman play kube
.yamlファイルでそれを使用してポッド構成をインポートして実行します。これは根のない設定です。
コンテナは内部ネットワークを介して通信するためにDNSを使用する必要があります。私はpodman create network mon
DNSを有効にして「mon」というブリッジネットワークを作成しました。
使用すると、podman play kube monitoring.yaml --network mon
コンテナはDNSを介して互いに通信できません。 Podman play kubeを使用せずに手動でPodとコンテナを作成して設定をテストしました。手動設定では、ポッドのコンテナはDNSを使用してお互いを見つけることができます。
手動設定:
podman pod create --name monitoring
podman network create mon
podman run -d --rm --network=mon --pod=monitoring --name postgres-server docker.io/timescale/timescaledb:latest-pg14
podman run -d --rm --network=mon --pod=monitoring --name zabbix-server docker.io/zabbix/zabbix-server-pgsql
月曜日にネットワーク構成:
[
{
"cniVersion": "0.4.0",
"name": "mon",
"plugins": [
{
"bridge": "cni-podman1",
"hairpinMode": true,
"ipMasq": true,
"ipam": {
"ranges": [
[
{
"gateway": "10.89.0.1",
"subnet": "10.89.0.0/24"
}
]
],
"routes": [
{
"dst": "0.0.0.0/0"
}
],
"type": "host-local"
},
"isGateway": true,
"type": "bridge"
},
{
"capabilities": {
"portMappings": true
},
"type": "portmap"
},
{
"backend": "",
"type": "firewall"
},
{
"type": "tuning"
},
{
"capabilities": {
"aliases": true
},
"domainName": "dns.podman",
"type": "dnsname"
}
]
}
]
監視.yaml文書:
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-3.4.7
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2022-05-24T13:40:30Z"
labels:
app: monitoring
name: monitoring
spec:
containers:
- args:
- postgres
image: docker.io/timescale/timescaledb:latest-pg14
name: postgres-server
resources: {}
securityContext:
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
- args:
- /usr/sbin/zabbix_server
- --foreground
- -c
- /etc/zabbix/zabbix_server.conf
image: docker.io/zabbix/zabbix-server-pgsql:latest
name: zabbix-server
resources: {}
securityContext:
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
volumeMounts:
- mountPath: /var/lib/zabbix/export
name: bdc06ccb2b092148bb78c353fccc104255a81a8735eb3a14974f6ede0e6516e8-pvc
- mountPath: /var/lib/zabbix/snmptraps
name: 196d7983e1b62995bae07beb7942e18ac46dcf6d3346e43fff2604c9a7bc30ec-pvc
restartPolicy: Never
volumes:
- name: bdc06ccb2b092148bb78c353fccc104255a81a8735eb3a14974f6ede0e6516e8-pvc
persistentVolumeClaim:
claimName: bdc06ccb2b092148bb78c353fccc104255a81a8735eb3a14974f6ede0e6516e8
- name: 196d7983e1b62995bae07beb7942e18ac46dcf6d3346e43fff2604c9a7bc30ec-pvc
persistentVolumeClaim:
claimName: 196d7983e1b62995bae07beb7942e18ac46dcf6d3346e43fff2604c9a7bc30ec
status: {}
トラブルシューティング
podman network create
Podmanのドキュメントは、次のように作成されたネットワーク接続のサポートを表します。https://docs.podman.io/en/latest/markdown/podman-play-kube.1.html#network-mode-net
podman exec -it <container> /bin/bash
生成されたコンテナでシェル()を開きます。手動、zabbix-server、postgres-serverにpingを送信できます。
$ podman exec -it zabbix-server /bin/bash
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.89.0.3 c61fdf070064 zabbix-server
10.89.0.1 host.containers.internal
bash-5.1$ ping postgres-server
PING postgres-server.dns.podman (10.89.0.2) 56(84) bytes of data.
64 bytes from postgres-server.dns.podman (10.89.0.2): icmp_seq=1 ttl=64 time=0.051 ms
64 bytes from postgres-server.dns.podman (10.89.0.2): icmp_seq=2 ttl=64 time=0.062 ms
64 bytes from postgres-server.dns.podman (10.89.0.2): icmp_seq=3 ttl=64 time=0.100 ms
^C
--- postgres-server.dns.podman ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2045ms
rtt min/avg/max/mdev = 0.051/0.071/0.100/0.021 ms
優秀キューブをプレイするコンテナ、ping、monitoring-<name>-server
または<name>-server
失敗。手動とプレイのkube設定の両方でDNSリゾルバをpingすると、正常に返されます。
bash-5.1$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.89.0.2 monitoring be3df46ca68d-infra
10.89.0.1 host.containers.internal
bash-5.1$ ping postgres-server
ping: postgres-server: Name does not resolve
bash-5.1$ ping monitoring-postgres-server
ping: monitoring-postgres-server: Name does not resolve
bash-5.1$ cat /etc/resolv.conf
search dns.podman
nameserver 10.89.0.1
手動設定とkubeプレイ設定の両方を使用してpodman inspect <container>
「mon」ネットワークに接続しました。しかし、関連してキューブをプレイする設定後のネットワーク設定の出力は次のようになります。
"NetworkMode": "container:49e7b0bafd4619b9bcb50b1b841aeee3cb910bf3c555a9788dc297e71c948092"
これは以下に関連しています。手動ネットワーク設定:
"NetworkMode": "bridge"
「play kube」は --network フラグを無視し、代わりに内部コンテナネットワークを生成するようです。コンテナネットワーク設定の表示くべプレイ、両方のコンテナのIPが同じです。優秀手動設定時にIPが異なります。
"Networks": {
"mon": {
"EndpointID": "",
"Gateway": "10.89.0.1",
"IPAddress": "10.89.0.3",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "3e:30:b7:e2:1d:00",
"NetworkID": "mon",
Networks": {
"mon": {
"EndpointID": "",
"Gateway": "10.89.0.1",
"IPAddress": "10.89.0.2",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "fa:1a:6b:f3:02:3a",
"NetworkID": "mon",
私はSELinuxを使用または使用せずに強制モードでpodman kubeをプレイしようとしました。また、この設定をrootとして実行してみましたが、役に立ちませんでした。
次のバージョンを使用してこの設定をテストしました。
- ポッドキャスト:3.4.7、4.0.2
- RHEL:8.5、8.6
どんな助けでも大変感謝します!
ベストアンサー1
解決策が見つかりました。共有ネットワーク名前空間を使用してpodman play kube
作成されたコンテナ。したがって、相互アクセスを使用できますlocalhost
。