2017-08-09 12 views
0

Das ist meine config:Wie kann ich zwei Container laufen, die auf dem gleichen Port auf Kubernetes hören?

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: wordpress 
    labels: 
    app: wordpress 
spec: 
    replicas: 1 
    selector: 
    matchLabels: 
     app: wordpress 
    template: 
    metadata: 
     labels: 
     app: wordpress 
    spec: 
     terminationGracePeriodSeconds: 30 
     containers: 
     - image: wordpress:latest 
      name: wordpress 
      imagePullPolicy: "Always" 
      env: 
      - name: WORDPRESS_HOST 
       value: localhost 
      - name: WORDPRESS_DB_USERNAME 
       valueFrom: 
       secretKeyRef: 
        name: cloudsql-db-credentials 
        key: username 
      volumeMounts: 
      - name: wordpress-persistent-storage 
       mountPath: /var/www/html 
     - image: nginx:latest 
      name: nginx 
      ports: 
      - containerPort: 80 
       name: nginx 
     - image: gcr.io/cloudsql-docker/gce-proxy:1.09 
      name: cloudsql-proxy 
      command: ["/cloud_sql_proxy", "--dir=/cloudsql", 
        "-instances=abcxyz:europe-west1:wordpressdb=tcp:3306", 
        "-credential_file=/secrets/cloudsql/credentials.json"] 
      volumeMounts: 
      - name: cloudsql-instance-credentials 
       mountPath: /secrets/cloudsql 
       readOnly: true 
      - name: ssl-certs 
       mountPath: /etc/ssl/certs 
      - name: cloudsql 
       mountPath: /cloudsql 
     volumes: 
     - name: wordpress-persistent-storage 
      gcePersistentDisk: 
      pdName: wordpress-disk 
      fsType: ext4 

     - name: cloudsql-instance-credentials 
      secret: 
      secretName: cloudsql-instance-credentials 
     - name: ssl-certs 
      hostPath: 
      path: /etc/ssl/certs 
     - name: cloudsql 
      emptyDir: 

Ich mag würde Nginx Hafen 80 nur (zu handeln als Load Balancer) auszusetzen. Jedoch es nicht anspringt, die Protokolle aus dem Behälter:

2017/08/09 14:39:50 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use) 
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 
2017/08/09 14:39:50 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use) 
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 
2017/08/09 14:39:50 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use) 
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 
2017/08/09 14:39:50 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use) 
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 
2017/08/09 14:39:50 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use) 
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 
2017/08/09 14:39:50 [emerg] 1#1: still could not bind() 
nginx: [emerg] still could not bind() 

ich vermute ich dies ist auf die Wordpress-Container bereits auf Port 80.

Ich hätte angenommen, sie wäre unabhängig und keine Portkonflikte haben. Wie kann ich dieses Problem beheben?

Antwort

1

Ich hätte angenommen, dass sie unabhängig wären und keine Portkonflikte hätten. Wie kann ich dieses Problem beheben?

Quer durch Pods, das ist wahr, aber innerhalb ein Pod, alle Behälter die gleiche Netzwerknamensraum teilen - das ist ein Teil dessen, was ein Pod macht sie. Um das zu erreichen, was Sie über "als Lastenausgleicher" gesagt haben, stellen Sie den nginx-Pod getrennt bereit und richten Sie seinen Upstream auf einen Dienst, den Sie für den WordPress-Pod erstellen. Oder Sie können natürlich auch den Port, an den der Wordpress-Container angeschlossen ist, verschieben, aber das Folgende sollte berücksichtigt werden, bevor Sie das tun.

Sofern Ihr „Load Balancer“ gehen wird wirklich Last Rechnung zu tragen, und nicht nur ein Round-Robin-LB sein, der Akt des einen Service wird der Verkehr über alle Pods natürlich zerstreuen, die die Wähler übereinstimmen im Dienste.

+0

Sie meinen, den nginx-Container in einem separaten Pod bereitzustellen? Wie würde ich den Hafen auch verlegen? –

+0

Für die erste Frage, ja; Für die zweite Frage müsste ich mir das 'wordpress: neuste' Bild ansehen, um zu sehen, welche Konfigurationsoptionen sie anbieten, aber die kurze Version ist, das eingebettete nginx zu ändern (was ich vermute) und' listen 0.0.0.0 : 8080; 'und dann sein' containerPort: 8080' entsprechend –

Verwandte Themen