1

我想部署一个Docker容器,公开一个简单的Docker服务器,在Google容器引擎(Kubernetes)中的httpbin.org服务的克隆。谷歌云负载平衡器强制HTTP,而不是HTTPS,使用Kubernetes Ingress

这是我使用的服务定义:

apiVersion: v1 
kind: Service 
metadata: 
    name: httpbin 
    labels: 
    app: httpbin 
spec: 
    type: LoadBalancer 
    ports: 
    - port: 80 
    targetPort: 3000 
    protocol: TCP 
name: http 
selector: 
    app: httpbin 

的入口被定义为:

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: httpbin-tls 
    annotations: 
    kubernetes.io/ingress.global-static-ip-name: "http-bin-static-ip" 
spec: 
    tls: 
    - secretName: positive-ssl 
    backend: 
    serviceName: httpbin 
    servicePort: 80 

在服务/入口仪表板,我可以看到两个IP地址,一个直接绑定到服务(临时)和绑定到Ingress的静态IP。在端口80上直接调用它们就像魅力一样。

做完这些之后,我创建了静态IP的A记录,保证了负载均衡的GKE仪表盘是确定的:

GKE Load Balancers Dashboard

的HTTPS端点应该是工作照了很多我检查过的教程和手册,但它不是!每次调用HTTPS都会被重定向(301)到HTTP端口。

来自卷边-v输出:

* Rebuilt URL to: https://httpbin-1.mydomain.com/ 
* Trying XXX.XX.XX.XX... 
* TCP_NODELAY set 
* Connected to httpbin-1.mydomain.com (XXX.XX.XX.XX) port 443 (#0) 
* TLS 1.2 connection using TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 
* Server certificate: mydomain.com 
* Server certificate: COMODO ECC Domain Validation Secure Server CA 2 
* Server certificate: COMODO ECC Certification Authority 
> GET/HTTP/1.1 
> Host: httpbin-1.mydomain.com 
> User-Agent: curl/7.51.0 
> Accept: */* 
> 
< HTTP/1.1 301 Moved Permanently 
< Date: Fri, 03 Mar 2017 18:01:23 GMT 
< Transfer-Encoding: chunked 
< Connection: keep-alive 
< Cache-Control: max-age=3600 
< Expires: Fri, 03 Mar 2017 19:01:23 GMT 
< Location: http://httpbin-1.mydomain.com/ 
< 
* Curl_http_done: called premature == 0 
* Connection #0 to host httpbin-1.mydomain.com left intact 

我没有创建任何形式的自动重定向,严格遵循官方手册(从Kubernetes和GKE),但我无法超越这个。甚至试图从头开始重新创建整个堆栈,一个新的集群,新的负载平衡器,但获得了相同的结果。

我错过了什么? TKS!

+0

您能否显示没有真实值的秘密文件?我对你使用的按键很感兴趣。 – Gambo

+0

“秘密文件”是什么意思? SSL证书?我已经在AWS中使用了相同的证书,并且使用SSL诊断进行了检查,证书没问题。 –

回答

1

AFAIK GLB无法为您做正确的转发。您必须在入口后使用服务器中的Web服务器来解决该情况。

您当前的行为似乎是由

annotations: kubernetes.io/ingress.global-static-ip-name: "http-bin-static-ip"

引起的删除部分从入口,你应该看到您的HTTPS会话在您的入口被终止。

+0

如果没有静态IP,HTTP和HTTPS终端将具有不同的IP,因此我无法在DNS中配置A记录,我将如何访问它? –

+1

您将不得不将SVC.type更改为NodePort而不是当前的LoadBalancer(请注意该行)。然后,入口将为您提供HTTP和HTTPS的IP。 –

+0

仍然没有运气,根据您的建议更改,它没有在GLB中分配任何IP,只是没有前端配置的Load Balancer。 –

相关问题