gpt4 book ai didi

nginx - 入口 nginx - 外部 URL 的代理

转载 作者:行者123 更新时间:2023-12-05 02:40:11 31 4
gpt4 key购买 nike

我搜索(很多天以来......)如何使用 Ingress Nginx 以使用外部 url 作为后端。

是的,我使用带有 externalName 的服务对象。我还在 nginx 中测试了许多指令但没有成功......

目标很简单:

  • 用户只能解析和加入我的公共(public) URL (url-public.com & url-public-2.com)
  • 我想将请求发送到超出我控制范围和集群 (url-ext.com) 的外部后端

我的入口可以解析 url-ext.com,用户不能。当然,url-ext.com 在这里有适当的证书并公开为 HTTPS ;)。注意:我的入口暴露了 2 个 url,但我认为这不重要。

我的代码:

服务:

kind: Service
apiVersion: v1
metadata:
name: external-eip
namespace: external-url
spec:
type: ExternalName
externalName: url-ext.com

入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: external-eip
namespace: external-url
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/upstream-vhost: "url-ext.com"
nginx.ingress.kubernetes.io/configuration-snippet: |
# more_clear_input_headers "Host" "X-Forwarded-Host";
more_set_input_headers 'Host: url-ext.com';
proxy_set_header Host url-ext.com;

spec:
rules:
- host: url-public.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: external-eip
port:
number: 443
- host: url-public-2.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: external-eip
port:
number: 443

结果(curl 或浏览器访问):

<html>
<head><title>504 Gateway Time-out</title></head>
<body>
<center><h1>504 Gateway Time-out</h1></center>
<hr><center>nginx</center>
</body>
</html>

和入口日志:

2021/08/06 21:44:45 [error] 10873#10873: *2914631 upstream timed out (110: Operation timed out) while connecting to upstream, client: 10.203.65.14, server: url-public.com, request: "GET / HTTP/2.0", upstream: "https://10.203.64.5:443/", host: "url-ext.com"

10.203.64.5是url-ext.com的真实IP。

而且,curl https://10.203.64.5:443/-k -v -H "Host: url-ext.com" 工作。

不要问我“为什么使用这个注解”,我不知道 :p 许多谷歌搜索和许多测试......

那么,当这个 externalName(可能)也在 RP 下时,使用 externalName 的正确入口配置是什么?

注意:重写和其他重定向不起作用,因为它会重写用户位置,而我不想要它。用户无法访问和解析 url-ext.com,只能访问和解析 url-public.com。

谢谢

最佳答案

回复我自己。问题是我的 Ingress(以及我所有的 K8S 集群)都在 HTTP Squid 代理下。

我已经为代理安装了所有 env 变量,但 Ingress 容器似乎没有使用它 ...

因此,为了让它正常工作,我允许我的集群出站 80/443 端口到目的地。

你只需要这个注解:

    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/upstream-vhost: "url-ext.com"

但是,如果你们中有人知道如何设置我的 Ingress 以使用我的 HTTP 代理,我将需要它。

br

关于nginx - 入口 nginx - 外部 URL 的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68687814/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com