единая служба с несколькими открытыми портами на модуле с несколькими контейнерами

У меня есть несколько контейнеров для работы в одном модуле.

 kubectl apply  -f myymlpod.yml

kubectl expose pod mypod --name=myname-pod --port 8855 --type=NodePort

потом я смог протестировать "разоблачить"

minikube service list

..

|-------------|-------------------------|-----------------------------|
|  NAMESPACE  |          NAME           |             URL             |
|-------------|-------------------------|-----------------------------|
| default     | kubernetes              | No node port                |
| default     | myname-pod              | http://192.168.99.100:30036 |
| kube-system | kube-dns                | No node port                |
| kube-system | kubernetes-dashboard    | No node port                |
|-------------|-------------------------|-----------------------------|

Теперь в моем myymlpod.yml есть несколько контейнеров. В одном контейнере работает служба на 8855, а в другом - на 8877.

Следующая статья ~ намекает ~ на то, что мне нужно делать.

https://www.mirantis.com/blog/multi-container-pods-and-container-communication-in-kubernetes/

Отображение нескольких контейнеров в модуле

Хотя в этом примере показано, как использовать один контейнер для доступа к другим контейнерам в модуле, довольно часто несколько контейнеров в модуле прослушивают разные порты, и все они должны быть открыты. Чтобы это произошло, вы можете либо создать одну службу с несколькими открытыми портами, либо создать одну службу для каждого порта, который вы пытаетесь раскрыть.

"создать единую службу с несколькими открытыми портами"

Я не могу найти ничего о том, как это сделать, выставить несколько портов.

Как открыть несколько портов в одной службе?

Спасибо.

ДОБАВИТЬ:

K8Containers.yml (ниже)

apiVersion: v1
kind: Pod
metadata:
  name: mypodkindmetadataname
  labels:
    example: mylabelname

spec:

  containers:

  - name: containername-springbootfrontend
    image: mydocker.com/webfrontendspringboot:latest 
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m" 
      requests:
        memory: "612Mi"
        cpu: "400m"
    ports:
      - containerPort: 8877


  - name: containername-businessservicesspringboot
    image: mydocker.com/businessservicesspringboot:latest
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m" 
      requests:
        memory: "613Mi"
        cpu: "400m" 
    ports:
      - containerPort: 8855

kubectl apply  -f K8containers.yml
pod "mypodkindmetadataname" created

kubectl get pods
NAME                    READY     STATUS    RESTARTS   AGE
mypodkindmetadataname   2/2       Running   0          11s

k8services.yml (ниже)

apiVersion: v1
kind: Service
metadata: 
  name: myymlservice
  labels: 
    name: myservicemetadatalabel
spec: 
  type: NodePort
  ports:
  - name: myrestservice-servicekind-port-name
    port: 8857
    targetPort: 8855
  - name: myfrontend-servicekind-port-name
    port: 8879
    targetPort: 8877
  selector: 
    name: mypodkindmetadataname

........

kubectl apply  -f K8services.yml
service "myymlservice" created

........

 minikube service myymlservice --url
http://192.168.99.100:30784
http://192.168.99.100:31751

........

 kubectl describe service myymlservice


Name:                     myymlservice
Namespace:                default
Labels:                   name=myservicemetadatalabel
Annotations:              kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"name":"myservicemetadatalabel"},"name":"myymlservice","namespace":"default"...
Selector:                 name=mypodkindmetadataname
Type:                     NodePort
IP:                       10.107.75.205
Port:                     myrestservice-servicekind-port-name  8857/TCP
TargetPort:               8855/TCP
NodePort:                 myrestservice-servicekind-port-name  30784/TCP
Endpoints:                <none>
Port:                     myfrontend-servicekind-port-name  8879/TCP
TargetPort:               8877/TCP
NodePort:                 myfrontend-servicekind-port-name  31751/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

....

К сожалению, он все еще не работает, когда я пытаюсь вызвать "открытые" элементы.

звонящий

http://192.168.99.100:30784/myrestmethod

не работает

и звонит

http://192.168.99.100:31751

or

http://192.168.99.100:31751/index.html

не работает

Кто-нибудь видит, что мне не хватает.

ПРИЛОЖЕНИЕ (сейчас работает)

Селектор не соответствует названию, он соответствует ярлыку (ам).

k8containers.yml (частично вверху)

apiVersion: v1
kind: Pod
metadata:
  name: mypodkindmetadataname
  labels:
    myexamplelabelone: mylabelonevalue
    myexamplelabeltwo: mylabeltwovalue

spec:

  containers:

  # Main application container
  - name: containername-springbootfrontend
    image: mydocker.com/webfrontendspringboot:latest 
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m" 
      requests:
        memory: "612Mi"
        cpu: "400m"
    ports:
      - containerPort: 8877


  - name: containername-businessservicesspringboot
    image: mydocker.com/businessservicesspringboot:latest
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m" 
      requests:
        memory: "613Mi"
        cpu: "400m" 
    ports:
      - containerPort: 8855

k8services.yml

apiVersion: v1
kind: Service
metadata: 
  name: myymlservice
  labels: 
    name: myservicemetadatalabel
spec: 
  type: NodePort
  ports:
  - name: myrestservice-servicekind-port-name
    port: 8857
    targetPort: 8855
  - name: myfrontend-servicekind-port-name
    port: 8879
    targetPort: 8877
  selector: 
    myexamplelabelone: mylabelonevalue
    myexamplelabeltwo: mylabeltwovalue

person granadaCoder    schedule 01.05.2019    source источник


Ответы (1)


Да, вы можете создать одну единую службу с несколькими открытыми портами или подключением порта службы, указывающим на порты контейнера.

kind: Service
apiVersion: v1
metadata:
  name: mymlservice
spec:
  selector:
    app: mymlapp
  ports:
  - name: servicename-1
    port: 4444
    targetPort: 8855
  - name: servicename-2
    port: 80
    targetPort: 8877

Где целевые порты выходят на порты вашего контейнера.

person Harsh Manvar    schedule 01.05.2019
comment
Могу ли я смешать это с моим существующим файлом myymlpod.yml или я создаю новый файл yml для этой части? (обратите внимание, я тоже добавил пример myymlpod.yml в свой вопрос) - person granadaCoder; 02.05.2019
comment
лучше создать новый файл yaml, чтобы не было путаницы. один для обслуживания и один только для конфигурации модуля - person Harsh Manvar; 02.05.2019
comment
Я принял твой совет. И обновил свой вопрос полной картиной. Мне все еще не звонят на работу (если получится посмотреть). Спасибо... - person granadaCoder; 02.05.2019
comment
Этот ответ не является полным, но он действительно привел меня к окончательному ответу, таким образом, мое принятие в качестве ответа. Полный ответ см. В моем исходном вопросе и в разделе ПРИЛОЖЕНИЕ (сейчас работает). Спасибо, Харш, за то, что помог мне! - person granadaCoder; 03.05.2019
comment
Спасибо, что приняли это как ответ, на самом деле мой план состоял в том, чтобы написать для вас весь файл, но я также застрял на одной проблеме с кубернетами, так что извините, я забыл, иначе я добавляю файл goona. - person Harsh Manvar; 03.05.2019
comment
Спасибо. С этим селектором сложно с первого раза! В моем исходном примере (с какого-то веб-сайта) для имени и метки использовалось одно и то же строковое значение, поэтому мне потребовалось время. Ненавижу двусмысленность значений / меток в примерах. Еще раз спасибо за вашу помощь здесь. - person granadaCoder; 03.05.2019
comment
:) рад помочь в любое время - person Harsh Manvar; 03.05.2019