Kubernetes Ingress需要反向代理设置

时间:2019-05-24 13:42:02

标签: kubernetes reverse-proxy node-red kubernetes-helm nginx-ingress

在我的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;">&nbsp;</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时,我只看到起作用的部分,请参见屏幕截图:

enter image description here

在我看来,我错过了反向代理设置。通常,我会将这些东西放在像这样的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。

3 个答案:

答案 0 :(得分:0)

您的静态内容似乎仍在使用根路径前缀,因此可以使用浏览器开发者控制台进行验证。通用应用程序应具有一个配置,以了解它们是否在非根路径前缀上运行。您应该在应用程序中找到该配置选项并正确配置。 Nginx入口与此错误无关。

答案 1 :(得分:0)

我还没有使用过它,所以不确定是否有帮助,但是您可能想尝试为Proxy redirect添加注释。

  

使用注释class Writable extends Stream implements NodeJS.WritableStream {...} nginx.ingress.kubernetes.io/proxy-redirect-from,可以在proxied server responsenginx.ingress.kubernetes.io/proxy-redirect-toLocation标头字段中设置应更改的文本

     

在注释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