我正在考虑在 OpenShift 上部署 Ansible Tower,但如果没有必要,我不想部署我自己的 Postgresql 实例(这并不是什么大问题)。
如果我在 OpenShift 上部署Ansible Tower,该图看起来就像我必须部署自己的 Postgresql 实例,而不是使用其正常的嵌入式实例。
这是准确的吗或者它会启动自己的 Postgresql pod?
我正在考虑在 OpenShift 上部署 Ansible Tower,但如果没有必要,我不想部署我自己的 Postgresql 实例(这并不是什么大问题)。
如果我在 OpenShift 上部署Ansible Tower,该图看起来就像我必须部署自己的 Postgresql 实例,而不是使用其正常的嵌入式实例。
这是准确的吗或者它会启动自己的 Postgresql pod?
patch-nginx 容器错误地解析了 nginx 进程内的 patch-backend 的 IP 地址,但当我从 nginx 命令行手动检查它时却没有。
我有 nginx 作为 podman 容器内的代理运行,尽管谷歌搜索似乎显示 Docker 上也存在这个问题并且没有解决方案。
在 nginx 日志中我看到:
2023/07/12 19:33:52 [error] 24#24: *52 connect() failed (113: No route to host) while connecting to upstream, client: 10.89.0.119, server: patches.lan, request: "GET /api/auth HTTP/1.1", upstream: "https://10.89.0.117:9000/api/auth", host: "10.10.25.131", referrer: "https://10.10.25.131/"
10.89.0.119 - - [12/Jul/2023:19:33:52 +0000]
"GET /api/auth HTTP/1.1" 502 559
"https://10.10.25.131/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
Certificate: "-"
Client Key: "-"
我们看到上游主机是10.89.0.117。我去检查 nginx 配置 - proxy_pass 指向patches-backend
:
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
log_format custom '
$remote_addr - $remote_user [$time_local]
"$request" $status $body_bytes_sent
"$http_referer" "$http_user_agent"
Certificate: "$ssl_client_cert"
Client Key: "$ssl_client_raw_cert"
';
server {
listen 80;
listen [::]:80;
server_name patches.lan 10.10.25.131 ;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name patches.lan 10.10.25.131 ;
access_log /var/log/nginx/access.log custom;
# Client-facing certificate and key
ssl_certificate /patches/server_certs/patches.lan.crt;
ssl_certificate_key /patches/server_certs/patches.lan.key;
# Disable client certificate request
ssl_verify_client optional_no_ca;
location /api {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
# Set X-SSL-CERT header with client certificate
proxy_set_header X-SSL-CERT $ssl_client_escaped_cert;
proxy_pass https://patches-backend:9000;
}
location / {
proxy_set_header Host $http_host;
# Set X-SSL-CERT header with client certificate
proxy_set_header X-SSL-CERT $ssl_client_escaped_cert;
proxy_pass http://patches-frontend:3000;
}
}
一切都是它应该的样子。我根据从 nginx 容器到后端的 DNS 名称检查curl:
root@87c91993cab5:/# curl patches-backend:9000
curl: (52) Empty reply from server
这也是理所应当的。但是当我检查时podman inspect patches-backend
我看到:
...SNIP...
"Networks": {
"host-bridge-net": {
"EndpointID": "",
"Gateway": "10.89.0.1",
"IPAddress": "10.89.0.120",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "3e:c9:de:23:44:a6",
"NetworkID": "host-bridge-net",
"DriverOpts": null,
"IPAMConfig": null,
"Links": null,
"Aliases": [
"e9485d2c8cf7"
]
}
}
...SNIP...
patch-backend 显然是 10.89.0.120,但不知何故,在 nginx 的上下文中,它将该主机名解析为10.89.0.117
(正如我们在日志中看到的)网络上任何地方都不存在的主机名。
我完全不知道这是怎么发生的。patches-backend
nginx 配置具有主机名而不是 IP,因此它不是某个地方的硬编码 IP,并且如上所示,从命令行检查时,nginx 容器可以正确解析。然而,nginx 进程以某种方式获取了不存在的 IP 地址。我的容器都没有 IP 117:
# Reverse search 10.89.0.117 (the wrong IP) across all containers
[grant@patches2 opt]$ podman inspect -f '{{.Name}}' $(podman ps -a -q --format='{{.ID}}') | xargs -I {} sh -c 'podman inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" {} | grep -w 10.89.0.117 && echo Container: {}'
# Reverse search 10.89.0.120 (the correct IP) across all containers
[grant@patches2 opt]$ podman inspect -f '{{.Name}}' $(podman ps -a -q --format='{{.ID}}') | xargs -I {} sh -c 'podman inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" {} | grep -w 10.89.0.120 && echo Container: {}'
10.89.0.120
Container: patches-backend
我无法想象这是如何发生的,并且我无法在任何简单的示例中重现它。值得注意的是,没有对 nginx 应用进一步的配置。这是唯一的配置。
我注意到即使检查的状态firewalld
似乎也需要sudo
. 我想尽可能降低此脚本的权限,因此,我希望用户能够以普通用户的身份检查端口状态。如有必要,他们随后可以请求升级到sudo
。
是否有可能在基于 RHEL 的系统上实现这一目标,或者您是否需要sudo
全部实现?
我有一个必须容器化的应用程序,它在安装过程中依赖于 systemd,我无法更改。它不需要systemd 来运行,它只需要在安装过程中存在即可。到目前为止,我能找到的唯一一个内置了 systemd 并且是最新的容器是 Red Hat 的 UBI,但是它在没有订阅的情况下可用的包非常有限。
右行我正在通过使用Atomic 的存储库并从那里安装来解决这个问题。
目前是否有另一个容器提供 sytsemd?
我一直在学习使用 udev 并注意到当我运行时udevadm test --action="add" /sys/block/sdc
我看到以下内容:
GROUP 6 /usr/lib/udev/rules.d/50-udev-default.rules:59
IMPORT 'scsi_id --export --whitelisted -d /dev/sdc' /usr/lib/udev/rules.d/60-persistent-storage.rules:50
starting 'scsi_id --export --whitelisted -d /dev/sdc'
'scsi_id --export --whitelisted -d /dev/sdc'(out) 'ID_SCSI=1'
'scsi_id --export --whitelisted -d /dev/sdc'(out) 'ID_VENDOR=NVMe'
'scsi_id --export --whitelisted -d /dev/sdc'(out) 'ID_VENDOR_ENC=NVMe\x20\x20\x20\x20'
'scsi_id --export --whitelisted -d /dev/sdc'(out) 'ID_MODEL=Dell_Ent_NVMe_v2'
'scsi_id --export --whitelisted -d /dev/sdc'(out) 'ID_MODEL_ENC=Dell\x20Ent\x20NVMe\x20v2'
'scsi_id --export --whitelisted -d /dev/sdc'(out) 'ID_REVISION=.2.0'
'scsi_id --export --whitelisted -d /dev/sdc'(out) 'ID_TYPE=disk'
'scsi_id --export --whitelisted -d /dev/sdc'(out) 'ID_SERIAL=236435330529024120025384100000002'
'scsi_id --export --whitelisted -d /dev/sdc'(out) 'ID_SERIAL_SHORT=36435330529024120025384100000002'
'scsi_id --export --whitelisted -d /dev/sdc'(out) 'ID_SCSI_SERIAL=S6CSNA0R902412 '
Process 'scsi_id --export --whitelisted -d /dev/sdc' succeeded.
在这种情况下,sdc 是位于 PERC H755 上的虚拟磁盘。我还没有改变 udev 中的任何内容。
以上是您在使用 RAID0(直通/JBOD 模式)时看到的内容。如果您创建 RAID 5,您会看到
probe /dev/sda raid offset=0
LINK 'disk/by-id/wwn-0x6f4ee080160bd5002ab7652100a1691a' /usr/lib/udev/rules.d/60-persistent-storage.rules:97
IMPORT '/usr/bin/sg_inq --export --inhex=/sys/block/sda/device/inquiry --raw' /usr/lib/udev/rules.d/61-scsi-sg3_id.rules:17
starting '/usr/bin/sg_inq --export --inhex=/sys/block/sda/device/inquiry --raw'
'/usr/bin/sg_inq --export --inhex=/sys/block/sda/device/inquiry --raw'(out) 'SCSI_TPGS=0'
'/usr/bin/sg_inq --export --inhex=/sys/block/sda/device/inquiry --raw'(out) 'SCSI_TYPE=disk'
'/usr/bin/sg_inq --export --inhex=/sys/block/sda/device/inquiry --raw'(out) 'SCSI_VENDOR=DELL'
'/usr/bin/sg_inq --export --inhex=/sys/block/sda/device/inquiry --raw'(out) 'SCSI_VENDOR_ENC=DELL\x20\x20\x20\x20'
'/usr/bin/sg_inq --export --inhex=/sys/block/sda/device/inquiry --raw'(out) 'SCSI_MODEL=PERC_H755N_Front'
'/usr/bin/sg_inq --export --inhex=/sys/block/sda/device/inquiry --raw'(out) 'SCSI_MODEL_ENC=PERC\x20H755N\x20Front'
'/usr/bin/sg_inq --export --inhex=/sys/block/sda/device/inquiry --raw'(out) 'SCSI_REVISION=5.16'
我的问题是 udev 如何“决定”将 PERC 列入白名单,白名单的功能是什么?
一般来说,我尝试使用谷歌搜索与 udev 白名单相关的结果,但我能找到的唯一结果都是关于将 USB 设备列入白名单而不是白名单的一般功能。
我正在阅读 UEFI 标准:https ://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf
第 115 页第 5 节讨论了 GPT 磁盘布局。我对这到底是如何工作的有点困惑。从下面听起来 UEFI 会忽略 MBR。
如果遗留 MBR 不使用 GPT 磁盘布局(即,如果它使用 MBR 磁盘布局),它可能位于磁盘的 LBA 0(即第一个逻辑块)。UEFI 固件不执行 MBR 上的引导代码。
那么这基本上是说如果您将固件置于传统引导模式,这就是如何定义一个可以很好地与该传统引导模式配合使用的 MBR?我是否正确地说,如果系统的固件处于 UEFI 模式,那么具有第 5 章中指定的 MBR 的系统将无法启动?
对于任何想要权威来源的人,请参阅描述目录结构的标准第 13.3.1.3 节。
制作一个 UEFI 可引导的 Ubuntu Linux USB 驱动器,该驱动器带有一个用于引导的 EFI 分区和一个单独的 EXT4 分区上的 Linux。(注意:这不是我的想法,我不能偏离这些条件,否则我会做一些更直接的事情。)
/
在 EXT4 文件系统上使用一个带有挂载点的分区您单击EFI USB Device
,屏幕短暂闪烁黑色,然后立即返回同一屏幕。但是,如果我在最初安装的计算机上启动 USB 驱动器 - 它可以工作。
我对 EFI 引导过程的理解是在这个阶段该选项应该指向 grub.efi 文件,此时 grub 应该启动然后接管引导序列。
看起来 grub 没有根据我所看到的开始?如果是这样,我不明白为什么没有。我的理解是,这里发生的是系统固件扫描所有存储介质以查找可行的 EFI 分区。这个被填充的事实告诉我,它一定是在 USB 上正确找到了这个,但是这里 EFI 分区中的东西不起作用。我查看了 EFI 分区,令我感到奇怪的是,有一个名为 EFI 的文件夹,其中一个文件夹具有我的系统名称,然后是一个名为 grubx64.efi 的文件。里面应该有更多吗?
有谁知道是否可以使用 TC 从一个源接口镜像到多个接口?我做了以下事情:
tc qdisc add dev e101-001-0 handle ffff: ingress
tc qdisc del dev e101-001-0 [ root | ingress ]
tc -s qdisc ls dev e101-001-0
tc filter add dev e101-001-0 parent ffff: protocol all u32 match u32 0 0 action mirred egress mirror dev e101-005-0
tc -s -p filter ls dev e101-001-0 parent ffff:
tc filter del dev e101-001-0 parent ffff:
tc qdisc add dev e101-001-0 handle 1: root prio
这让它工作输出到一个接口,但我注意到,如果我添加另一个带有新接口的过滤器,第一个接口将停止接收流量,这一切都转到新接口。