1

Ich versuche, einen Docker-Container bereitzustellen, der einen einfachen Docker-Server, einen Klon des httpbin.org-Dienstes in der Google Container Engine (Kubernetes) verfügbar macht.Google Cloud Load Balancer erzwingen HTTP, nicht HTTPS, mit Kubernetes Ingress

Dies ist die Service-Definition Ich verwende:

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 

Der Eintritt ist definiert als:

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 

im Dienste/Ingress Dashboards ich zwei IPs sehen können, die man direkt gebunden an den Dienst (ephemere) und die statische IP an den Eingang gebunden. Sie beide direkt an Port 80 anzurufen, wirkt wie ein Zauber.

Nachdem das getan ist, habe ich einen A-Eintrag für die statische IP erstellt und gewährleistet die Load-Balancer OK in der GKE Armaturenbrett war:

GKE Load Balancers Dashboard

Der HTTPS-Endpunkt sollte entsprechend viel arbeiten von Tutorials und Handbüchern habe ich überprüft, aber es ist nicht! Jeder Aufruf von HTTPS wird an den HTTP-Port umgeleitet (301).

Die Ausgabe von der Curl -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 

ich keine automatische Umleitung aller Art erstellt haben, gefolgt streng nach den offiziellen Handbüchern (von Kubernetes und GKE), aber ich bin nicht in der Lage, darüber hinaus zu gehen . Sogar versucht, den ganzen Stapel von Grund auf neu zu erstellen, ein neues Cluster, neue Load Balancer, aber die gleichen Ergebnisse.

Was fehlt mir? Tks!

+0

Können Sie die geheime Datei ohne die echten Werte anzeigen? Ich bin an den Schlüsseln interessiert, die Sie verwenden. – Gambo

+0

Was meinst du mit der "geheimen Datei"? Das SSL-Zertifikat? Ich habe bereits das gleiche Zertifikat in AWS verwendet, und auch mit SSL-Diagnose überprüft, das Zertifikat ist in Ordnung. –

Antwort

1

AFAIK GLB kann die richtige Weiterleitung nicht für Sie ausführen. Sie müssen nach dem Eindringen einen Webserver im Dienst verwenden, um dieses Szenario zu lösen.

Ihr aktuelles Verhalten scheint durch

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

, dass ein Teil von Ihrem Eindringen entfernt verursacht werden, und Sie sollten Ihre https-Sitzung sehen an Ihrem Ingress beendet werden.

+0

Ohne die statische IP haben die HTTP- und die HTTPS-Anschlüsse unterschiedliche IPs, daher kann ich den A-Eintrag im DNS nicht konfigurieren, wie soll ich darauf zugreifen? –

+1

Sie müssen Ihren SVC.type zu NodePort anstelle des aktuellen LoadBalancer auch ändern (bemerken Sie einfach diese Linie). Dann erhält der Ingress Ihre IP für HTTP und HTTPS. –

+0

Immer noch kein Glück, mit Ihren vorgeschlagenen Änderungen hat es keine IP im GLB zugewiesen, nur ein Load Balancer ohne eine Frontend-Konfiguration. –

Verwandte Themen