使用 Apache 代理而不是 Ingress 将客户端 IP 从我的本地计算机传递到远程 Minikube

问题描述 投票:0回答:1

有谁知道如何将客户端IP从我的本地计算机传递到安装了Minikube的远程VM主机(Debian 11,没有GUI并且不想拥有它),minikube有MySQL和phpmyadmin服务( phpmyadmin 中的 phpmyadmin pod/container 位于路径 var/www/html/my_path/ 上,其中我的 PHP 应用程序的 php 文件位于).. phpmyadmin 服务我通过远程虚拟机的端口转发在本地计算机上访问,我通过端口 80 访问它。 Ingress也是通过远程VM的端口转发来访问的,我是通过端口443访问的。 为什么要端口转发?因为 NodePort 或 LoadBalncer、minikube 隧道方法确实有效,教程和网络上的大多数人都说通过 NodePort 公开它,然后在浏览器中使用它。

浏览器中 minikube service some-service --url 命令或 URL 的结果: minikube_ip:nodeport_service_port - 如果 minikube 在本地计算机上,则可以,否则它不起作用,这就是 port 的原因转发并且有效。

在index.php(登录表单 - 在我的基于minikube的php应用程序中)添加了这些行:

$clientIP = isset($_SERVER['HTTP_X_REAL_IP']) ? $_SERVER['HTTP_X_REAL_IP'] : (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']);
echo "<br><br>Client IP Address: " . $clientIP. "<br>";
foreach (getallheaders() as $name => $value) {
    echo "$name: $value <br>";
}
echo "<br><br>*************************************<br><br> " . $clientIP. "<br>";
$clientIP2 = isset($_SERVER['X-ORIGINAL-FORWARDED-FOR']) ? $_SERVER['X-ORIGINAL-FORWARDED-FOR'] : $_SERVER['sdfREMOTE_ADDR'];
echo "<br><br>X-Original-Forwarded-For: " . $clientIP2. "<br>";
echo "<br> php_uname :<br>";
echo php_uname();
var_dump($_SERVER);

我遍历了所有并尝试了所有在线AI应用程序和基本网络支持,并在ingress yaml、ingress pod/容器中的nginx.conf、常规日志、错误日志、常规(minikube插件启用ingress)安装ingress后进行了修改。安装 Ingress,更改了 nginx.conf 以及与 phpmyadmin pod 一起使用的 Ingress pod 的 ingress 和 configmap yaml .. 无济于事。

在通过本地网络浏览器访问的 minikube php 应用程序中仍然没有成功看到我的真实本地 IP,而不是:

Client IP Address: 127.0.0.1
X-Real-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1

谢谢

php yaml minikube configmap ingress-nginx
1个回答
0
投票

解决方案:

好的,所以在安装了 Minikube 的远程虚拟机上,我安装了 Apache 并从 Minikube 中删除了 Ingress 部署,因为 Ingress 充当反向代理,并且由于我是网络和服务器一般环境中的初学者,所以我不希望有任何潜在的冲突。无论如何,删除的部署并不意味着它消失了,只需将 Ingeress 部署 YAML 再次重新应用到 Minikube 集群即可将其恢复。

所以,首先我检查了我的 Phpmyadmin 服务 Nodeport :

my_user@my_vm_host /etc/apache2/sites-available $ kubectl 获取 svc 名称 类型 集群 IP 外部 IP 端口 年龄 mysql-服务 NodePort 10.97.143.83 3306:30796/TCP 49d phpmyadmin-服务 NodePort 10.106.171.32 80:30901/TCP 4d1h

然后在 apache .conf 文件中,我不记得我第一次编辑的位置,但可以在其中找到 /etc/apache2/sites-enabled/ 或 /etc/apache2/sites-available/

并将现有内容编辑为此:

ServerName my_k8s.my_evidencija.myAD.domain

ProxyPreserveHost On
ProxyPass /my_evidencija http://172.17.0.3:30901/my_evidencija/
ProxyPass /phpmy_admin http://172.17.0.3:30901/

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

myAD.domain 是您的 AD 域,您可以使用 Powershell 在 Win 上找到: PS C:\windows\system32> 获取 ADDomain |选择对象-展开属性 DNSRoot

AD 是有必要检查的,因为我的 php 应用程序已与它集成..

my_k8s.my_evidencija 是我的主机名,目前必须使用相应的 IP 添加到 C:\Windows\System32\drivers tc\hosts 文件中 并且仅适用于我的本地 Win 10 计算机,但如果您在浏览器中使用主机 IP,则它适用于本地网络中的每台计算机。

172.17.0.3 是您在安装 Minikube 的远程虚拟机上使用“minikube ip”命令获得的 minikube IP。 30901 是 Phypmyadmin 服务 NodePort,80 是 Phpmyadmin pod/容器端口,因为它在 Docker 中,然后我将其推送到使用 Docker 驱动程序的 Minikube。

ProxyPass 指令将请求从 http://my_k8s.my_evidencija.myAD.domain/my_evidencija 转发到 http://172.17.0.3:30901/my_evidencija

/my_evidencija/ 是我创建的目录,用于将我的应用程序 php 文件分组在 phpmyadmin pod/container 根文件夹 var/www/html/ 中 因此,当我输入本地计算机浏览器 http://my_k8s.my_evidencija/my_evidencija/ 时,它会打开我的 php 应用程序而不是 phpmyadmin 的 index.php 并打开我的应用程序登录表单

如果我在浏览器中输入http://my_k8s.my_evidencija/phpmy_admin/,那么它会导致Phpmyadmin登录表单,因为http://172.17.0.3:30901/路径是Phpmydmin自己的index.php所在的phpmyadmin根路径

这仍然是用于学习/开发/测试的 Minikube 环境,所以当然没有像生产环境中那样的云提供商..

© www.soinside.com 2019 - 2024. All rights reserved.