2016-09-14 3 views
0

Это, как я понимаю, поток идет речь:Отображение входящего порта в kubernetes службу другому порту на Docker контейнера

  1. Когда запрашивающий услугу kubernetes (через HTTP, например) Я использую порт 80.
  2. запрос направляется в бобе (по-прежнему на порт 80)
  3. порт пересылает запрос на (Докер) контейнер, который предоставляет порт 80
  4. контейнер обрабатывает запрос

Однако мой контейнер предоставляет другой порт, скажем 3000. Как сделать сопоставление портов, например, 80: 3000 на шаге 2 или 3?

Есть путающие варианты, такие как targetport и hostport в документах kubernetes, которые мне не помогли. kubectl port-forward, похоже, перенаправляет только мой локальный (рабочий) порт машины на конкретный модуль для отладки.

Эти команды, которые я использую для создания сервиса в Google Cloud:

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

ответ

1

я обнаружил, что мне нужно, чтобы добавить некоторые аргументы моей второй команды:

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

Это создает услугу, которая направляет входящий HTTP-трафик (на порт 80) на его контейнеры на порт 3000.

Более удобный способ сделать это всего лишь с файлами yaml service.yaml и deployment.yaml и вызова

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

где файлы имеют такое содержание

# 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 

и

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

Обратите внимание, что селектор службы должен соответствовать метке развертывания.

+5

есть некоторая опечатка, вероятно, так как вы определяете 'targetPort' для своей службы как' 3001', тогда как контейнер предоставляет порт '3000' –