2017-03-04 4 views
0

Wenn ich einen Domain-Namen habe www.domain.com registriert und ich habe frischen kubernetes Cluster und läuft. Ich habe Deployments und Services erfolgreich gelauncht, um die Anforderungen offen zu legen.Kubernetes Cluster APP DNS

Der Dienst erstellt eine LoadBalancer auf meinem GCE-Cluster, und wenn ich versuche, auf meine APP über die externe IP zuzugreifen, funktioniert es.

Aber das ist, was ich im Idealfall erreichen wollte:

Um Strecke den gesamten Verkehr für meine apps wie www.app.domain.com, www.app2.domain.com. Nach Forschung habe ich gefunden, dass ich einen Ingress Controller vorzugsweise NGINX Server brauche, ich habe versucht, dies zu tun und schade kläglich.

Dies ist der Dienst auszusetzen JSON für meine Einsätze:

{ 
    "kind": "Service", 
    "apiVersion": "v1", 
    "metadata": { 
     "name": 'node-js-srv' 
    }, 

    "spec": { 
     "type": 'LoadBalancer', 
     "label": { 
      'app': 'node-js-srv' 
     }, 

     "ports": [ 
     { 
      "targetPort": 8080, 
      "protocol": "TCP", 
      "port": 80, 
      "name": "http" 
     }, 
     { 
      "protocol": "TCP", 
      "port": 443, 
      "name": "https", 
      "targetPort": 8080 
     } 
     ], 
     "selector": { 
      "app": 'node-js' 
     }, 
    } 
} 
+0

Welchen Teil von Nginx haben Sie nicht? Ein Reverse-Proxy ist nicht so schwierig –

+0

@ cricket_007 Ich konnte nicht herausfinden, wie die ngnix Lube Deployment Yaml aussehen sollte. Ich nehme "customdomain.com" als meine registrierte Domain an .... und meine Apps laden mein Konto auf "app.customdomain.com" .... Ich bin wirklich neu in der ganzen Netzwerk- und Entwickler-Branche .... – kt14

+0

I bin nicht vertraut mit kubernetes, nur nginx config –

Antwort

0

GCE/GKE haben bereits eine Ingress Controller und Sie diese verwenden könnten.

Sie müssen Ihren Dienst als Typ NodePort angeben und eine Ressource von Typ Ingress See erstellen: https://kubernetes.io/docs/user-guide/ingress/

finden Sie ein Beispiel für GCE hier https://github.com/kubernetes/ingress/tree/master/examples/deployment/gce

Service:

{ 
    "kind": "Service", 
    "apiVersion": "v1", 
    "metadata": { 
     "name": 'node-js-srv' 
    }, 

    "spec": { 
     "type": 'NodePort', 
     "label": { 
      'app': 'node-js-srv' 
     }, 

     "ports": [ 
     { 
      "targetPort": 8080, 
      "protocol": "TCP", 
      "port": 80, 
      "name": "http" 
     }, 
     { 
      "protocol": "TCP", 
      "port": 443, 
      "name": "https", 
      "targetPort": 8080 
     } 
     ], 
     "selector": { 
      "app": 'node-js' 
     }, 
    } 
} 

Ingress :

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: test 
spec: 
    rules: 
    - host: www.app.domain.com 
    http: 
     paths: 
     - backend: 
      serviceName: node-js-srv 
      servicePort: 80 
    - host: www.app2.domain.com 
    http: 
     paths: 
     - backend: 
      serviceName: xyz 
      servicePort: 80 
+0

Sind Sie sicher über die Voraussetzung für NodePort? Es sollte ohne NodePort funktionieren, wenn Ingress-Controller verwendet wird. Es kann auch mehr Arbeit erforderlich sein, DNS einzurichten. Die DNS-Einträge müssen auf etwas verweisen, das vom GCE/GKE-Cluster bereitgestellt wird, entweder eine Load-Balancer-IP oder ein CNAME. Nicht sicher, wie Google dies jedoch gelöst hat ... –

+0

Auf GCE/GKE NodePort ist erforderlich, siehe hier https://github.com/kubernetes/kubernetes/issues/26508. – Sebastian

+0

Ingress erleichtert die Verwaltung des DNS. Der Ingress erstellt einen Load Balancer mit einer IP und Sie können einen Wildcard-DNS-Eintrag erstellen, z. * .domain.com. Danach leitet kubernetes den Datenverkehr an den richtigen Dienst weiter. – Sebastian

Verwandte Themen