gpt4 book ai didi

docker - Coreos 安全性

转载 作者:行者123 更新时间:2023-12-02 18:17:18 26 4
gpt4 key购买 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 相当灵活的东西
  • 允许从更广泛的互联网访问的“边缘机器”的东西。

  • 解决方案

    我将讨论我最终是如何解决这个问题的。感谢 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工具可以更方便的访问东西。

    最佳答案

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

    像这样:

    [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
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com