Доступ к сервису Kubernetes, преобразованному из Docker Compose

Я создал приложение с помощью Docker Compose, которое включало в себя экземпляр Nginx, принимающий соединения через порт 80:

  nginx:
    image: nginx:1.15.12-alpine
    container_name: nginx
    volumes:
      - etc.
    ports:
      - 80:80

Я хотел бы раскрутить это приложение на Kubernetes, работающем на моей локальной машине (macOS). Итак, я бегу kompose convert, документировано здесь.

Это генерируется nginx-service.yaml который выглядит так:

apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.18.0 ()
  creationTimestamp: null
  labels:
    io.kompose.service: nginx
  name: nginx
spec:
  ports:
  - name: "80"
    port: 80
    targetPort: 80
  selector:
    io.kompose.service: nginx
status:
  loadBalancer: {}

Я побежал kubectl apply со всеми файлами YAML, созданными kompose, а потом kubectl describe svc nginx:

Name:              nginx
Namespace:         myproject
Labels:            io.kompose.service=nginx
Annotations:       kompose.cmd=kompose convert
                   kompose.version=1.18.0 ()
                   kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"kompose.cmd":"kompose convert","kompose.version":"1.18.0 ()"},"creationTimestamp":null,...
Selector:          io.kompose.service=nginx
Type:              ClusterIP
IP:                172.30.110.242
Port:              80  80/TCP
TargetPort:        80/TCP
Endpoints:         
Session Affinity:  None
Events:            <none>

Однако я не могу получить доступ к веб-серверу, перейдя к http://172.30.110.242:80 на одной машине.

Есть документация по доступу к сервисам, работающим на кластерах. Я новичок в k8s, и я не уверен, как диагностировать проблему и выбрать правильное решение из перечисленных опций.

Это дефект в kompose чтобы он не генерировал сопоставимый файл конфигурации службы?

1 ответ

Увидеть:

https://kubernetes.io/docs/concepts/services-networking/service/

Ваш URL "connect to" с вашего локального компьютера в мир K8 не будет "172.xxx". Вероятно, это будет 192.168.99.100:33333 (номер порта будет другим).. запустите это:

minikube service myservicename -n "default" --url

посмотрим, что это дает вам

но в основном вам нужно "разоблачить" мир k8 для внешнего мира.

этот yml должен помочь

apiVersion: v1
kind: Service
metadata: 
  name: myservicename
  namespace: mycustomnamespace
  labels: 
    name: myservicemetadatalabel
spec: 
  type: NodePort
  ports:
  - name: myfirstportname
    port: 80
    targetPort: 80    
  selector: 
    myexamplelabelone: mylabelonevalue
    myexamplelabeltwo: mylabeltwovalue

селектор будет ссылаться на ваши настройки контейнера / контейнера.

apiVersion: v1
kind: Pod
metadata:
  name: myfirstpodmetadataname
  namespace: mycustomnamespace
  labels:
    myexamplelabelone: mylabelonevalue
    myexamplelabeltwo: mylabeltwovalue

"селекторы" выходят за рамки этого вопроса... но приведенное выше даст вам необходимую крошку

также см:

Как выставить стручки k8 в общедоступный интернет?

Вам понадобится служба ingress или Nodeport/Loadbalancer, чтобы ваша служба была доступна извне.

Вы также можете попробовать использовать https://github.com/konveyor/move2kube для преобразования файла создания докеров.

move2kube translate -s <folder containing docker compose file>

Он спросит вас, какие сервисы вы хотите предоставить извне, и создаст для вас соответствующие входящие yamls.

Другие вопросы по тегам