我在 Amazon Web Services 上由 kops 设置了一个 kubernetes 集群
我有 2 个站点设置。一个是通过 SSL/TLS/https 保护的,另一个是 http。两者都是 Wordpress 网站。域已更改以保护站点身份
入口配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-rules
spec:
tls:
- hosts:
- site1.com
secretName: site1-tls-secret
- hosts:
- www.site1.com
secretName: site1-tls-secret
rules:
- host: site1.com
http:
paths:
- path: /
backend:
serviceName: site1
servicePort: 80
- host: www.site1.com
http:
paths:
- path: /
backend:
serviceName: site1
servicePort: 80
- host: blog.site2.com
http:
paths:
- path: /
backend:
serviceName: site2
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
入口服务 …
我的理解是容器比 VM 轻得多,因为它们不虚拟化硬件,而只是将其中运行的软件与系统上其他容器中运行的软件隔离开来。
我的情况是我买不起额外的服务器,而且我拥有的服务器都在运行虚拟机管理程序。我需要提供至少 6 个“服务器”来托管相对较小的 Web 应用程序的实例(每个实例用于不同的客户)。为这些服务器中的每一个配置一个新的 VM 会很浪费,所以我计划设置 2 个 VM 并执行以下操作之一:
考虑到这一点,是否存在与容器系统相关的不可忽略的开销,这会使在 VM 中使用它们成为一个坏主意,或者是否有任何其他技术原因我不想使用容器?
怎么会出现以下情况,即$PATH直接从bash -c:
docker exec -i -t my_container bash -c "echo $PATH"
Run Code Online (Sandbox Code Playgroud)
返回$PATH与后面不同的值,即启动交互式 bash 会话并回显$PATH?
docker exec -i -t my_container bash
root@21e6d898c3c2:/# echo $PATH
Run Code Online (Sandbox Code Playgroud)
为了给这个问题提供一些上下文,我想在容器中运行一个命令,docker exec如果我开始一个交互式 bash 会话,这个命令在路径上,但如果我只是运行命令,则不是。
在这种情况下,使用可执行文件的完整路径不是解决方法,因为该命令依赖于其他环境变量,就像PATH在 bash 交互式会话中设置的一样,但如果我直接运行该命令则不会。
我们在几个节点上以 swarm 模式运行 docker。
找不到一种快速简便的方法来从管理器节点列出 swarm 中的所有容器(最好带有状态)。人们可以看到覆盖网络和连接到这些网络的本地运行的容器,还有服务——但不能看到容器的详细信息等。
它是否已经可用,或者使用 REST API 是唯一可用的选项?(但不确定那里是否提供了所有必需的信息)
我已经使用 docker 命令行尝试了一个 docker 镜像,但没有指定卷的名称。现在我发现我想继续使用这个容器/图像,但是通过在 docker compose 中定义容器。
保留匿名/未命名卷中的数据并在 docker compose 创建的新容器中使用它们的最佳实践是什么?
这个问题让我发疯。我运行全新安装的 Ubuntu 18.04,使用:
我尝试了股票 docker.io 包和包形成 docker 自己的 deb 存储库。
我希望能够部署 docker 容器,选择 ip 来绑定其端口(例如 -p 10.58.26.6:98800:98800),然后使用 UFW 打开端口。
但是 docker 似乎创建了干扰 br0 桥的 iptables 规则(例如,主机无法 ping libvirt 来宾)
我环顾四周,找不到好的、具有安全意识的解决方案。
手动操作iptables -I FORWARD -i br0 -o br0 -j ACCEPT似乎可以使一切正常。
"iptables": falsedocker 守护进程的设置也允许网桥正常运行,但会破坏 docker 的容器出口网络。
我发现这个解决方案看起来很简单,通过编辑单个 UFW 的文件/sf/answers/3621911961/,但它根本不起作用。
永久解决这个问题的最佳实践和安全方法是什么,幸免于重新启动?
编辑:
我结束了加-A ufw-before-forward -i br0 -o br0 -j ACCEPT在年底/etc/ufw/before.rules前提交。我可以将其视为解决方案还是不会引起一些问题?
我正在创建一个仅限 SFTP 的Docker容器,该容器将由多人使用,其唯一目的是在他们自己的chrooted 环境中上传和管理文件。
从理论上讲,它非常安全:我将禁用所有形式的bash登录,并且不会在其中运行任何其他进程。但是,我想再加强一点:
我想阻止这个容器从内部访问 Internet,除了它作为 SFTP 服务器的目的。
澄清一下:我知道如何防止外部世界访问我的容器——我可以设置传入iptables规则,并且我只能在我的 docker run 命令中公开 SFTP 端口。
但是,当在容器内运行时,我想让以下命令(作为示例)失败:
curl google.com
Run Code Online (Sandbox Code Playgroud)
我的目的是减少被黑容器可能造成的损害(不能用于发送垃圾邮件等)。
我有一个 docker 容器运行如下:
docker run --name some_container_1 -p 8080:80 -d some_image
Run Code Online (Sandbox Code Playgroud)
哪个工作正常。容器将它的端口 80 公开到 8080,并且可以从本地主机访问。
然而,出于某种原因,它完全忽略了 INPUT iptables 规则,并且也可以从外部访问。
如何限制对我的 Docker 容器的访问,只允许 ie IP 123.456.789.0 从外部访问它?
谢谢。
须藤 iptables -L -n -v --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
2 365 23380 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 0 0 ACCEPT tcp -- * …Run Code Online (Sandbox Code Playgroud) 我的具体情况如下。我使用特定的cpuset启动一个docker容器:
docker run --cpuset-cpus="0-2" # ...
Run Code Online (Sandbox Code Playgroud)
在该容器内,我运行一个 shell 脚本作为入口点,该 shell 脚本将make在某个时候运行。我想弄清楚有多少工作(-j)。我当然可以通过环境传递已分配 CPU 的数量,但更喜欢自动检测它的方法。
我知道我可以使用taskset -c -p $$或cat /proc/self/status | grep Cpus_allowed_list检索Cpus_allowed当前进程的 ,但我不知道如何检索允许的 CPU 的实际数量。我想避免解析这些命令的输出或摆弄Cpus_allowed掩码,但会在没有选项时这样做。
docker ×10
iptables ×2
bash ×1
bridge ×1
docker-swarm ×1
kubernetes ×1
linux ×1
lxc ×1
openvz ×1
scheduling ×1
security ×1
sftp ×1
shorewall ×1
ssh ×1
ufw ×1
vmware-esxi ×1