sách gpt4 ai đã đi

docker - Bảo mật Coreos

In lại 作者:行者123 更新时间:2023-12-02 18:17:18 26 4
mua khóa gpt4 Nike

我正在玩 coreos 和 digitalocean,我想开始允许我的容器之间进行内部通信。

我已经为所有主机设置了私有(private)网络,现在我想确保某些容器只打开到 localhost 和内部接口(interface)的端口。

我为此探索了很多选择,但似乎没有一个令人满意:

  • 使用“-p”,我可以确保 docker 绑定(bind)到本地接口(interface),但这有两个缺点:
  • 我无法通过 SSH 轻松测试服务,因为该流量来自 localhost
  • 我需要编写一些 hacky shell 脚本来启动我的服务,以便注入(inject)容器在
  • 上运行的机器的地址。
  • 我尝试使用法兰绒,但它不会将流量设为私有(private)(或者我没有正确设置)
  • 我考虑在容器上使用 iptables 来防止外部访问,但这似乎并不安全
  • 我尝试在 coreos 主机上使用 iptables,但是......这很棘手,而且我无法让它工作。
  • 当我尝试在主机上配置iptables时,我使用了这里的方法:https://docs.docker.com/articles/networking/#communication-between-containers-and-the-wider-world ,通过向 docker 链添加 DROP 规则,但它不起作用,数据包仍然通过

  • 那么最好的方法是什么,我会花时间让它发挥作用。

    总的来说,我想我需要找到一些我能做到的事情:
  • 可靠地部署到所有主机
  • future 相当灵活的东西
  • 允许从更广泛的互联网访问的“边缘机器”的东西。

  • Giải pháp

    我将讨论我最终是如何解决这个问题的。感谢 larsks 的帮助。最后,他们的方法是正确的。这在 coreos 上很棘手,因为没有真正稳定的地址,就像 larsks 假设的那样。 coreos 的全部意义在于能够忘记 IP 地址。

    我通过找到一种不太糟糕的方法将 IP 地址注入(inject)服务文件中的命令来解决了这个问题。棘手的是它并不真正支持我期望的很多 shell 功能。我想要做的是将机器的 ip 地址分配给一个变量,然后将其注入(inject)到命令中:
    ip=$(ifconfig eth1 | grep -o 'inet [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' | grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*');
    /usr/bin/docker run -p $ip:7000:7000 ...

    但是,如前所述,这是行不通的。那么该怎么办?拿壳!
    ExecStart=/usr/bin/sh -c "\
    export ip=$(ifconfig eth1 | grep -o 'inet [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' | grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*');\
    echo $ip;\
    /usr/bin/docker run -p $ip:7000:7000"

    在此过程中,我遇到了一些问题。
  • 我很确定该命令中没有换行符,所以我必须添加';'字符
  • 当您在 shell 中测试上述 bash -c 命令时,它会产生与 systemd 执行此操作时截然不同的效果。在 shell 中,您需要转义 '$' 字符,而在 systemd 配置文件中,您不需要。
  • 我包括了回声,以便我可以看到命令认为 ip 是什么。
  • 当我做这一切的时候,我实际上在 docker 镜像中插入了一个小型网络服务器,这样我就可以使用 curl 进行测试。

  • 这种方法的缺点是它与 ifconfig 的工作方式和 ipv4 相关。事实上,这种方法不适用于我的 linux mint 笔记本电脑,因为 ifconfig 会产生不同格式的输出。这里重要的一课就是以yaml或者json的形式输出东西,这样shell json工具可以更方便的访问东西。

    1 Câu trả lời

    您可以使用环境文件来获取调度服务所在主机的 IP 地址(公共(public)和私有(private)),而不是 grep-ping IP 地址。这允许您以简单的方式将容器端口绑定(bind)到公共(public)或私有(private)端口。

    Giống như thế này:

    [Service]
    EnvironmentFile=/etc/environment
    ExecStart=/usr/bin/docker run --name myservice -p \
    ${COREOS_PUBLIC_IPV4}:80:80 \
    ${COREOS_PRIVATE_IPV4}:3306:3306 \
    ubuntu /bin/bash

    关于docker - Coreos 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29182325/

    26 4 0
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com