在我的Kubernetes集群中,Ingress面临一些挑战。作为示例,我通过Helm安装了NodeRed和Nginx组件。 NodeRed可通过
获得现在我创建了一个Ingress:
foreach(your sql variable){
echo '<tr>';
if($i - 1 == 1){
$i = 0;
echo ' <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['destination'].'</td>
<td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timein'].'</td>
<td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timein'].'</td>
<td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timein'].'</td>
<td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timeout'].'</td>';
}else{
echo ' <td colspan="5" style="border-right:1px solid #000;"> </td>';
}
echo '<td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="mday">'.$cd['mday'].'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" data-mrate="'.$cd['mrate'].'" class="mrate">'.rupiah($cd['mrate']).'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="tm"></td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="lday">'.$cd['lday'].'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" data-lrate="'.$cd['lrate'].'" class="lrate">'.rupiah($cd['lrate']).'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="tl"></td></tr>';}
当我执行Get http://my.server.name/nr时,我只看到起作用的部分,请参见屏幕截图:
在我看来,我错过了反向代理设置。通常,我会将这些东西放在像这样的Nginx中的反向代理设置中。但这是不可能的,因为我正在使用Nginx入口。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: nr-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- secretName: tls-secret1
hosts:
- my.server.name
rules:
- host: my.server.name
http:
paths:
- path: /nr
backend:
serviceName: my-nodered-node-red
servicePort: 1880
但是我不知道如何在Kubernetes中做到这一点?我想念什么? kubernetes版本是1.14.1。
答案 0 :(得分:0)
您的静态内容似乎仍在使用根路径前缀,因此可以使用浏览器开发者控制台进行验证。通用应用程序应具有一个配置,以了解它们是否在非根路径前缀上运行。您应该在应用程序中找到该配置选项并正确配置。 Nginx入口与此错误无关。
答案 1 :(得分:0)
我还没有使用过它,所以不确定是否有帮助,但是您可能想尝试为Proxy redirect添加注释。
使用注释
class Writable extends Stream implements NodeJS.WritableStream {...}
和nginx.ingress.kubernetes.io/proxy-redirect-from
,可以在proxied server response的nginx.ingress.kubernetes.io/proxy-redirect-to
和Location
标头字段中设置应更改的文本在注释
Refresh
中设置“关闭”或“默认”将禁用nginx.ingress.kubernetes.io/proxy-redirect-from
,否则必须同时使用两个注释。请注意,每个注释都必须是不带空格的字符串。默认情况下,每个注释的值为“ off”。
您还可以使用ConfigMap自定义Nginx配置。
nginx.ingress.kubernetes.io/proxy-redirect-to
或为您的kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-configuration
namespace: ingress-nginx
labels:
app: ingress-nginx
data:
http-snippet: |
location = / {
proxy_pass http://localhost:1880/;
}
使用server-snippets
注释:
Ingress
我希望这会有所帮助。
答案 2 :(得分:0)
也许回答太晚了,但我遇到了同样的问题并解决了:
1-changed httpRoot: '/nr' in node red settings.xml 配置文件(在 kubernetes 中,可能在 PV 中定义)(@vasili-angapov 提到)
2- 设置入口:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nodered-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- path: /nr
pathType: Prefix
backend:
service:
name: nodered
port:
number: 1880