AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1166050
Accepted
McLayn
McLayn
Asked: 2024-10-03 03:05:57 +0800 CST2024-10-03 03:05:57 +0800 CST 2024-10-03 03:05:57 +0800 CST

具有用户映射功能的 Podman kube rootless quadlet

  • 772

我正在尝试运行podman由 kubernetes YML 文件定义的 quadlet。我希望它在主机上的用户systemd下以无根方式运行: 。websystemctl --user status pod-web

在容器内部,PHP 进程以33:33用户身份运行。我希望/home/web/data主机上的目录归用户所有web,但同时在33:33容器内部,该目录可由用户读取和写入,容器被挂载到/var/www/html。

在评论中,你可以看到我尝试的一些方法。不幸的是,我对用户命名空间和subuid/subgid了解不够,无法使其与文档配合使用,而 Copilot 一直在产生幻觉,因此任何来自真人的帮助都将不胜感激。

我的问题与这个类似,但我想使用podman kubeYML 文件中定义的四元组。


环境:

  • AlmaLinux release 9.4 (Seafoam Ocelot)
  • podman version 4.9.4-rhel
  • systemd 252 (252-32.el9_4.7)
  • SELinux 启用强制
  • chown -R web:web /home/web
  • usermod --add-subuids 100000-165535 --add-subgids 100000-165535 web

/home/web/pod-web.yml:

apiVersion: v1
kind: Pod
metadata:
  name: pod-web
#  annotations:
#    io.podman.annotations.userns: "keep-id"
spec:
  containers:
  - name: pod-web
    image: docker.io/library/php:8.3-apache
#    securityContext:
#      runAsUser: 33
#      runAsGroup: 33
#      supplementalGroups: [65536]
#    ports:
#    - containerPort: 80
#      hostPort: 8000
    volumeMounts:
    - mountPath: /var/www/html
      name: web-data
  volumes:
  - name: web-data
    hostPath:
      path: /home/web/data
  restartPolicy: Always

使用runAsUser: 33容器记录:

(13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80

容器runAsUser: 0似乎可以运行,但如果我理解正确的话,这是一种不好的做法,因为它赋予了太多特权。


/home/web/.config/containers/systemd/pod-web.kube:

[Unit]
Description=Podman Quadlet: %p

[Service]
# ExecStartPre=/usr/bin/podman unshare -- /bin/bash -c 'chown -R 33:33 /home/web/data'

[Kube]
Yaml=/home/web/%p.yml
LogDriver=journald
#UserNS=keep-id:uid=33,gid=33
#UserNS=auto

[Install]
WantedBy=multi-user.target default.target
kubernetes
  • 1 1 个回答
  • 94 Views

1 个回答

  • Voted
  1. Best Answer
    McLayn
    2024-10-18T03:42:14+08:002024-10-18T03:42:14+08:00

    最终的效果如下:

    • chown -R web:web /home/web
    • usermod --add-subuids 100000-165535 --add-subgids 100000-165535 web

    /home/web/pod-web.yml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-web
    spec:
      containers:
      - name: pod-web
        image: docker.io/library/php:8.3-apache
    #    ports:
    #    - containerPort: 80
    #      hostPort: 8000
        volumeMounts:
        - mountPath: /var/www/html
          name: web-data
        securityContext:
          runAsUser: 33
          runAsGroup: 33
          capabilities:
            add: ["NET_BIND_SERVICE"]
      volumes:
      - name: web-data
        hostPath:
          path: /home/web/data
      restartPolicy: Always
    

    /home/web/.config/containers/systemd/pod-web.kube:

    [Unit]
    Description=Podman Quadlet: %p
    
    [Service]
    
    [Kube]
    Yaml=/home/web/%p.yml
    LogDriver=journald
    UserNS=keep-id:uid=33,gid=33
    #GlobalArgs=--log-level=debug
    
    [Install]
    WantedBy=multi-user.target default.target
    
    • %p将被替换为pod-web文件名中的

    特别是,(13)Permission denied: AH00072: make_sock: could not bind to address解决了securityContext:capabilities:add:["NET_BIND_SERVICE"]

    • 1

相关问题

  • Nvidia Config 后 Containerd 无法启动

  • 在使用 kubeadm 引导集群之前,如何修改 CoreDNS 配置映射?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve