2016-09-14 2 views
0

Dies ist die Art, wie ich die Strömung in Frage verstehen:Mapping eingehend Port in Kubernetes Dienst zu ander Port Docker Behälter

  1. Wenn ein Kubernetes Dienst anfordert (über http zum Beispiel) Ich bin mit Port 80
  2. wird die Anforderung an eine Hülse (noch auf dem Port 80)
  3. die Port leitet die Anfrage an den (Andockfensters) Behälter, die
  4. der Behälter verarbeitet die Anfrage
Port 80 weitergeleitet aussetzt

Allerdings zeigt mein Container einen anderen Port an, sagen wir 3000. Wie kann in Schritt 2 oder 3 ein Port-Mapping wie 80: 3000 erstellt werden?

Es gibt verwirrende Optionen wie targetport und hostport in den Kubernetes-Dokumenten, die mir nicht geholfen haben. kubectl port-forward scheint nur den Port meiner lokalen (Entwicklungs-) Maschine an einen bestimmten Pod zum Debuggen weiterzuleiten.

Dies sind die Befehle, die ich für die Einrichtung eines Dienstes in der Google-Cloud nutzen:

kubectl run test-app --image=eu.gcr.io/myproject/my_app --port=80 
kubectl expose deployment test-app --type="LoadBalancer" 

Antwort

1

Ich fand, dass ich einige Argumente zu meinem zweiten Befehl hinzuzufügen benötigt:

kubectl expose deployment test-app --type="LoadBalancer" --target-port=3000 --port=80 

Dies schafft ein Dienst, der eingehenden http-Verkehr (auf Port 80) zu seinen Pods auf Port 3000 leitet.

Eine schönere Möglichkeit, das Ganze zu tun, ist mit Yaml-Dateien service.yaml und deployment.yaml und

kubectl create -f deployment.yaml 
kubectl create -f service.yaml 

aufrufen, wo die Dateien diese Inhalte haben

# deployment.yaml 
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: app-deployment 
spec: 
    replicas: 2 
    template: 
    metadata: 
     labels: 
     app: test-app 
    spec: 
     containers: 
     - name: user-app 
      image: eu.gcr.io/myproject/my_app 
      ports: 
      - containerPort: 3000 

und

# service.yaml 
apiVersion: v1 
kind: Service 
metadata: 
    name: app-service 
spec: 
    selector: 
    app: test-app 
    ports: 
    - port: 80 
    targetPort: 3000 
    type: LoadBalancer 

Beachten Sie, dass der Wähler des Dienstes muss mit dem Etikett des Einsatzes entsprechen.

+5

Es gibt einen Tippfehler, wahrscheinlich weil Sie 'targetPort' für Ihren Dienst als' 3001' definieren, während der Container den Port '3000' freigibt –

Verwandte Themen