2017-08-09 6 views
0

これは私の設定です:kubernetesの同じポートでリスンする2つのコンテナを実行するにはどうすればよいですか?

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: 

私はnginxののポート80を公開したいと思います(ロードバランサとして機能します)。しかし、それは起動に失敗し、コンテナのログ:

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() 

私はこれを推測しているがWordpressのコンテナがすでにポート80

に聞いている私は、彼らが独立しただろうと想定しているだろうが原因で、ポートの競合はありません。この問題を解決するにはどうすればよいですか?

答えて

1

私はそれらが独立しており、ポートの競合がないと想定していました。この問題を解決するにはどうすればよいですか?

アクロス本当ポッドが、内ポッド、すべてのコンテナは、同じネットワーク名前空間を共有する - それは彼らポッドするものの一部です。あなたが「ロードバランサとして機能する」と述べたことを達成するには、nginx Podを別々に配備し、Wordpress Pod用に作成するサービスを上流に向けます。もちろん、ワードプレスコンテナがリッスンしているポートを再配置することもできますが、その前に次のことを考慮する必要があります。

あなたの「ロードバランサ」は本当に口座に負荷を取るつもり、とちょうどラウンドロビンLBではないされていない限り、サービスを作成するという行為は、当然、セレクタに一致するすべてのポッド間でトラフィックを分散しますサービスの中で

+0

nginxコンテナを別のポッドに展開することを意味しますか?また、私はどのようにポートを移転するだろうか? –

+0

最初の質問については、はい。 2番目の質問のために、私は 'wordpress:latest'イメージを見て、どの設定オプションが提供されているのかを見なければならないでしょうが、短いバージョンは埋め込まれたnginxを変更して、' listen 0.0.0.0 :8080; 'それに応じて' containerPort:8080 ' –

関連する問題