TIP*_*vin 4 nginx kubernetes nginx-ingress
我搜索(很多天以来......)如何使用 Ingress Nginx 以便使用外部 url 作为后端。
是的,我使用带有 externalName 的服务对象。我还在 nginx 中测试了很多指令但没有成功......
目标很简单:
我的入口可以解析 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
Run Code Online (Sandbox Code Playgroud)
入口:
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
Run Code Online (Sandbox Code Playgroud)
结果(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>
Run Code Online (Sandbox Code Playgroud)
和入口日志:
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"
Run Code Online (Sandbox Code Playgroud)
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 代理下。
我已经安装了代理的所有环境变量,但似乎 Ingress 容器不使用它......
因此,为了使其正常工作,我允许集群将 80/443 端口出站到目的地。
你只需要这个注释:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/upstream-vhost: "url-ext.com"
Run Code Online (Sandbox Code Playgroud)
但是,如果你们中有人知道如何设置我的 Ingress 以使用我的 HTTP 代理,我将需要它。
br
| 归档时间: |
|
| 查看次数: |
7150 次 |
| 最近记录: |