- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Linux 容器中有一个网络应用程序,LXD 版本是 LXD 3.13
Web 流量进入主机 vm(Ubuntu 16.04)并使用 NGinx 推送到 LXC,nginx 版本为 1.10.3
在容器内,我让 Kong 接收流量,并将其转发到我的应用程序。 Kong 是 1.1.2 版本。容器本身也是 Ubuntu 16.04。
互联网 -> NGINX -> LXD -> KONG(运行 NGINX) -> 我的应用程序
我的目标是让 Kong 终止 SSL 流量并提供白名单 IP 限制。 没有白名单我一切正常。但我的问题是 Kong 看到的是 LXD Base IP,而不是调用 NGinx 的原始客户端 IP。我想我需要使用“代理协议(protocol)”配置来解决这个问题,但如果我有其他选择,我会洗耳恭听。
我的 NGinx 配置非常简单。我必须使用流而不是 html,这样我就不必终止 SSL。这意味着我无法设置 X-Real-IP header ,我认为这是一个更简单的解决方案。因此,我尝试使用代理协议(protocol)。
stream {
server {
listen 80;
proxy_pass 10.214.23.104:8080;
proxy_protocol on;
}
server {
listen 443;
proxy_pass 10.214.23.104:8443;
proxy_protocol on;
}
}
10.214.23.104 在这种情况下只是我的 LXD 为这个容器分配的 IP。 8080 和 8443 分别是 http/https 流量的 Kong 端口。当我尝试添加“proxy_protocol on;”时行而不是看到来自 Kong 的错误 IP 响应,而是收到“不支持或无法识别的 SSL 消息”。 Kong 似乎没有处理它。
在这种情况下,这是我的 NGinx 错误日志:
epoll: fd:8 ev:0
001 d:00007F170E93E0F8
post event 0000558DBC67B8E0
timer delta: 300041
posted event 0000558DBC67B8E0
delete posted event 0000558DBC67B8E0
accept on 0.0.0.0:443, ready: 0
posix_memalign: 0000558DBC650650:256 @16
***.***.***.***:52412 fd:12
*5 client ***.***.***.***:52412 connected to 0.0.0.0:443
*5 tcp_nodelay
*5 posix_memalign: 0000558DBC650760:256 @16
*5 proxy connection handler
*5 malloc: 0000558DBC650870:328
*5 malloc: 0000558DBC654C00:16384
*5 stream proxy send PROXY protocol header
*5 get rr peer, try: 1
*5 stream socket 13
*5 epoll add connection: fd:13 ev:80002005
*5 connect to 10.214.23.104:8443, fd:13 #6
*5 proxy connect: -2
*5 event timer add: 13: 60000:1560459025106
worker cycle
accept mutex locked
epoll timer: 60000
epoll: fd:13 ev:0004 d:00007F170E93E3B0
*5 post event 0000558DBC68DA10
timer delta: 0
posted event 0000558DBC68DA10
*5 delete posted event 0000558DBC68DA10
*5 event timer del: 13: 1560459025106
*5 stream proxy connect upstream
*5 tcp_nodelay
*5 proxy 10.214.23.1:50946 connected to 10.214.23.104:8443
*5 malloc: 0000558DBC69F8A0:16384
*5 send: fd:13 44 of 44
*5 epoll add event: fd:12 op:1 ev:80002001
*5 event timer add: 12: 600000:1560459565106
worker cycle
accept mutex locked
epoll timer: 600000
epoll: fd:13 ev:0005 d:00007F170E93E3B0
*5 post event 0000558DBC67BA00
*5 post event 0000558DBC68DA10
timer delta: 1
posted event 0000558DBC67BA00
*5 delete posted event 0000558DBC67BA00
*5 recv: fd:13 177 of 16384
*5 send: fd:12 177 of 177
*5 recv: fd:13 0 of 16384
*5 upstream disconnected, bytes from/to client:0/177, bytes from/to upstream:177/44
*5 finalize stream proxy: 0
*5 free rr peer 1 0
*5 close stream proxy upstream connection: 13
*5 delete posted event 0000558DBC68DA10
*5 reusable connection: 0
*5 close stream connection: 12
*5 event timer del: 12: 1560459565106
*5 reusable connection: 0
*5 free: 0000558DBC69F8A0
*5 free: 0000558DBC654C00
*5 free: 0000558DBC650870
*5 free: 0000558DBC650650, unused: 0
*5 free: 0000558DBC650760, unused: 40
我还不太确定如何对 LXD 进行故障排除。我的容器的 lxc.log 文件中没有任何内容。
在 Kong 方面,我配置了日志记录和 IP 限制插件,并为适当的路由设置了 SSL 证书。我已经将 real_ip_header 添加为 proxy_protocol;我的理解是,这就是使用代理协议(protocol)时读取 IP 所需的全部内容。我对 Kong 的配置如下所示:
trusted_ips = 0.0.0.0/0
admin_listen = 0.0.0.0:8001
proxy_listen = 0.0.0.0:8080, 0.0.0.0:8443 ssl
...db stuff...
plugins = bundled,session
real_ip_header = proxy_protocol
Kong 的访问日志看起来确实在写它收到了一个调用,但它没有处理它,并且错误日志或该服务的日志插件日志中没有任何内容。
10.214.23.1 - - [14/Jun/2019:05:23:46 -0900] "PROXY TCP4 72.38.194.90 10.1.1.4 37604 443" 400 12 "-" "-"
最佳答案
我意识到,如果我已经指定了 proxy_listen 配置,则不会处理 real_ip_header 的 proxy_protocol 值。由于冲突,我们之前更改了监听端口,所以我不能使用默认的 proxy_listen 值。
所以我的解决方案是将 proxy_listen 行更改为:
proxy_listen = 0.0.0.0:8080 proxy_protocol, 0.0.0.0:8443 ssl proxy_protocol
real_ip_header = proxy_protocol
行仍然是必需的。
关于ssl - 使用 NGinx、LXD/LXC 和 Kong 的代理协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56588647/
从文档中不清楚 lxc start 和 lxc-start 之间的区别是什么,--help 提供了不同的用法和开关。教程使用这两种变体,但更深入地研究文档,lxc-start 似乎适用于在容器内运行的
当我尝试运行我的 lxc容器,我得到: lxc-start: 100: lxccontainer.c: wait_on_daemonized_start: 751 No such file or di
我目前有 3 个 IP 地址连接到同一台服务器。主机上的/etc/network/interfaces 文件如下: auto eth0 iface eth0 inet static addre
如果你看看 Docker 的特性,大部分都已经由 LXC 提供了。那么Docker添加了什么?为什么我要在普通 LXC 上使用 Docker? 最佳答案 来自 D
观察结果: lxc-webpanel功能符合预期 从命令行界面发出 lxc 命令并返回非零退出状态 1 从 python 解释器中的 lxclite 模块调用的函数引发异常 问题: 如何找到允许 lx
我试图在另一台机器上运行交叉编译的 lxc 图像,如下所示:我通过命令在 ubuntu 14.04 上创建了一个 lxc 图像: lxc-create -t /usr/share/lxc/templa
我是 LXC 容器的新手,正在使用 LXC v2.0。我想将设置传递给在我的容器内运行的进程(特别是它们的 Systemd 服务文件的命令行参数。 我正在考虑通过配置文件 lxc.environmen
我有一组连接到局域网的服务器。我可以在一台机器上安装和使用LXD容器,但是我一生都无法在网络上看到这些容器。我试图遵循这些网址,但无济于事: https://www.simpleprecision.c
我想在lxc 1.0.5和Ubuntu 14.04中创建一个不带“rootfs”的容器。 我之前在lxc的以前版本中已经做到了。在以前的版本中,如果我们使用不带“-t”选项的lxc-create,它将
我将用一个例子来解释这个问题。假设我们在同一镜像上运行两个单独的进程。其中之一创建文件并继续执行。我需要在不同容器中运行的其他进程来查看,检查和更改此文件。 提前致谢。 最佳答案 您可以使用这些卷。这
我想知道LXC是如何实现网络命名空间的。一个特定方面是它如何将命名空间中的虚拟接口(interface)连接到物理接口(interface)。假设一个命名空间中的网络连接到一个veth,根命名空间使用
我正在配置 Linux 内核 3.10.31ltsi 并想添加对 LXC 所需的支持,据我了解,cgroups 和命名空间应可用于 LXC,但需要包含哪些 menuconfig 中的配置? 最佳答案
我使用以下配置将 lirc0 绑定(bind)到容器中。 lxc.mount.entry = /dev/lirc0 dev/lirc0 none bind,optional,create=file 主
我的理解是否正确,内核模块不应加载到 LXC 内部,而只能加载到主机上,因为容器共享主机的内核? 最佳答案 不,您可以像任何 linux 系统一样在 LXC 中安装内核模块。但是你可以使用 secco
当我在它核心的容器上运行代码时,我无法在我的容器上找到它(或者核心文件没有被存储)。 ulimit -c 设置为 unlimited /proc/sys/kernel/core_pattern 设置为
我是 ansible 的新用户,我正在尝试在 yaml 脚本中启动 lxc init: - name: Copy LXC init file ansible.builtin.copy:
我正在编写一个将在 LXC 容器中运行的二进制文件。我控制二进制文件的源代码,但不控制它将在其中运行的容器的内容。特别是,我不想通过将二进制文件写入容器来污染容器。 有什么方法可以运行存储在主机上的二
我正在尝试使用 Docker 自动执行以下循环:生成一个容器,在其中执行一些工作(多个命令),从容器中获取一些数据。 类似的东西: for ( i = 0; i 不幸的是,随着指令列表的复杂性增加
我正在设置 LXD 来玩魔术。我希望存储仅安装在我的 RAID 设备上,因此最好删除默认存储或替换/重定向它。 我无法删除默认存储,因为默认配置文件使用它。 我如何使用 RAID 存储并确保它没有使用
我想了解LXC,并且遇到了这个网站:https://linuxcontainers.org/lxc/introduction/;在此站点中,它讨论了LXC,LXD等。 我有点困惑,给人的印象是LXC是
我是一名优秀的程序员,十分优秀!