2017-02-27 1 views
0

Ich versuche, Kubernetes zu konfigurieren und in meinem Projekt habe ich UI und API getrennt. Ich habe einen Pod erstellt und ich habe beide als Dienste ausgesetzt.Kubernetes Service als env var zu Frontend Nutzung

Wie kann ich API_URL in der pod.yaml-Konfiguration festlegen, um Anfragen vom Browser des Benutzers zu senden?

Ich kann localhost nicht verwenden, da die Kommunikation nicht zwischen Containern stattfindet.

pod.yaml

apiVersion: v1 
kind: Pod 
metadata: 
    name: project 
    labels: 
    name: project 
spec: 
    containers: 
    - image: 'ui:v1' 
    name: ui 
    ports: 
    - name: ui 
     containerPort: 5003 
     hostPort: 5003 
    env: 
    - name: API_URL 
     value: <how can I set the API address here?> 
    - image: 'api:v1' 
    name: api 
    ports: 
    - name: api 
     containerPort: 5000 
     hostPort: 5000 
    env: 
    - name: DATABASE_URL 
     valueFrom: 
     secretKeyRef: 
     name: postgres-url 
     key: url 

services.yaml

apiVersion: v1 
kind: Service 
metadata: 
    name: api 
    labels: 
    name: api 
spec: 
    type: NodePort 
    ports: 
    - name: 'http' 
    protocol: 'TCP' 
    port: 5000 
    targetPort: 5000 
    nodePort: 30001 
    selector: 
    name: project 
--- 
apiVersion: v1 
kind: Service 
metadata: 
    name: ui 
    labels: 
    name: ui 
spec: 
    type: NodePort 
    ports: 
    - name: 'http' 
    protocol: 'TCP' 
    port: 80 
    targetPort: 5003 
    nodePort: 30003 
    selector: 
    name: project 

Antwort

0

Ich habe einen Ingress erstellt, um dieses Problem zu lösen und auf DNS anstelle von IP zu verweisen.

ingres.yaml

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: project 
spec: 
    tls: 
    - secretName: tls 
    backend: 
    serviceName: ui 
    servicePort: 5003 
    rules: 
    - host: www.project.com 
    http: 
     paths: 
     - backend: 
      serviceName: ui 
      servicePort: 5003 
    - host: api.project.com 
    http: 
     paths: 
     - backend: 
      serviceName: api 
      servicePort: 5000 

deployment.yaml

apiVersion: v1 
kind: Pod 
metadata: 
    name: project 
    labels: 
    name: project 
spec: 
    containers: 
    - image: 'ui:v1' 
    name: ui 
    ports: 
    - name: ui 
     containerPort: 5003 
     hostPort: 5003 
    env: 
    - name: API_URL 
     value: https://api.project.com 
    - image: 'api:v1' 
    name: api 
    ports: 
    - name: api 
     containerPort: 5000 
     hostPort: 5000 
    env: 
    - name: DATABASE_URL 
     valueFrom: 
     secretKeyRef: 
     name: postgres-url 
     key: url 
1

Der Service IP bereits in einer Umgebungsvariablen innerhalb der Hülse zur Verfügung steht, weil Kubernetes eine Reihe von Umgebungsvariablen für jeden Dienst initialisiert, dass existiert in diesem Moment.

aufzulisten, die alle Umgebungsvariablen eines pod

kubectl exec <pod-name> env 

Wenn die Hülse vor dem Dienst erstellt wurde Sie es löschen muss und erneut erstellen.

Da Sie Ihren Dienst api benannt haben, ist eine der Variablen, die der obige Befehl enthalten sollte, API_SERVICE_HOST.

Aber Sie müssen nicht wirklich die Service-IP-Adresse innerhalb der Umgebungsvariablen suchen. Sie können den Dienstnamen einfach als Hostnamen verwenden. Jeder Pod kann sich mit dem Dienst api verbinden, indem er einfach api.default.svc.cluster aufruft (vorausgesetzt, Ihr Dienst befindet sich im Namespace default).

+0

Aber es ist eine interne IP 'API_SERVICE_HOST = 10.0.0.8' und ich brauche den exponierten ein' 192.168.99.100: PORT'. Weil ich das in der Webanwendung einstellen werde, um vom Browser konsumiert zu werden. Vielen Dank! –

Verwandte Themen