Ingress-gce(GKE)前面的Apache反向代理

时间:2019-05-22 21:44:39

标签: apache kubernetes google-compute-engine kubernetes-ingress

我正在努力克服从HTTP到HTTPS重定向流量的ingress-gce限制。

因此,最简单的配置应该是Apache2的反向代理,但不适用于我,这个apache是​​在我的kubernetes集群之外的另一个VM中,我只想“代理”流量,以便我可以处理请求,重定向到https等

我需要此特定的解决方案才能正常工作,因为我目前无法配置nginx入口,必须使用此GCE入口完成

我的 ingress yaml配置是:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: my-reserved-address
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - hosts:
    - mycustom.domain.com
    secretName: mydomain-com-certificate
  rules:
  - host: mycustom.domain.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: tomcat-service
          servicePort: 80
      - path: /app/*
        backend:
          serviceName: spring-boot-app-service
          servicePort: 80

我的 apache 虚拟主机配置是:

<VirtualHost *:80>
        ServerName myother.domain.com
        Redirect permanent / https://myother.domain.com/
</VirtualHost>

<VirtualHost *:443>
        ServerName myother.domain.com

        ProxyPreserveHost On
        ProxyRequests On
        ProxyPass / https://mycustom.domain.com/
        ProxyPassReverse / https://mycustom.domain.com/

        SSLEngine on
        SSLProxyEngine on
        SSLProtocol All -SSLv2 -SSLv3
        SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:!RC4:+HIGH:+MEDIUM
        SSLCertificateKeyFile /etc/ssl/domain.com/domain.com-privatekey-nopass.pem
        SSLCertificateFile /etc/ssl/domain.com/domain.com.crt
        SSLCACertificateFile /etc/ssl/domain.com/IntermediateCA.crt
</VirtualHost>

每个谜题都能按预期独立运行,我的意思是,如果我遵循以下任一条件

A) https://mycustom.domain.com/tomcat_context 
B) https://mycustom.domain.com/app/hello

我得到了预期的结果,A)我的网页得到了,B)我的应用程序得到了一个简单的答复

但是,当我使用代理 http://myother.domain.com/tomcat_context 时,我可以看到它是如何转换为 的,但是我总是从集群得到TEXT响应,始终是< / p>

default backend - 404

我也在检查Apache2日志,我可以看到apache在内部如何进行正确的调用

[Wed May 22 18:39:40.757619 2019] [proxy:debug] [pid 14196:tid 140335314564864] proxy_util.c(2213): [client xxx.xxx.xxx.xxx:52636] AH00944: connecting https://mycustom.domain.com/tomcat_context to mycustom.domain.com:443

如果所有部分都能正常工作,我找不到解释为什么会发生这种情况,最终,我的ingress-gce就像我的Apache代理的外部服务一样,应该已经在工作了。

配置,入口和apache都配置了SSL,并且它们都具有相同的完全相同的证书

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

入口控制器没有myother.domain.com的处理程序,因此会生成404。

您需要为myother.domain.com设置一个额外的Ingress主机,或者打开ProxyPreserveHost Off,以便代理从mycustom.domain.com配置中发送ProxyPass主机名。

tomcat应用程序如何利用Host标头通常是决定您需要通过代理映射标头的方式的决定者。