Docker Рабочий стол + k8s плюс HTTPS-прокси нескольких внешних портов для подключения к http в развертывании? - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь сделать прямую вещь, которая, я думаю, проста. Мне нужно иметь https://localhost: 44301 , https://localhost: 5002 , https://localhost: 5003 для прослушивания в моей среде k8s в docker рабочий стол, и прокси используйте указанный мной файл / пароль pfx и перенаправьте его через порт на pods, прослушивающие определенные c адреса (может быть порт 80, не имеет значения)

Документация это умопомрачительно сложный для того, что выглядит так, как будто это должно быть прямо вперед. Я могу запустить модули, я могу использовать kubectl port-forward, и они работают нормально, но я не могу понять, как заставить вход работать с ha-proxy или nginx или чем-то еще, что имеет какой-то смысл.

Может кто-нибудь сделать ELI5, рассказывающий, как это включить? Я нахожусь на Windows 10 2004 с экспериментами WSL2 и Docker, поэтому у меня должен быть доступ к входящим материалам, на которые они ссылаются в документах, и разъясняется как грязь.

Спасибо!

1 Ответ

1 голос
/ 26 марта 2020

Как обсуждалось в комментариях, это ответ сообщества на вики:


Мне удалось создать ресурс Ingress в Куберне на Docker в Windows.

Действия по воспроизведению :

  • Включение Hyper-V
  • Установка Docker для Windows и включение Kubernetes
  • Connect kubectl
  • Включить вход
  • Создать развертывание
  • Создать службу
  • Создать входной ресурс
  • Добавить хост в файл локальных хостов
  • Тест

Включить Hyper-V

Из Powershell с правами администратора выполните следующую команду:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

Система может попросить вас перезагрузить компьютер.

Установить Docker для Windows и включить Kubernetes

Установить Docker приложение со всеми параметрами по умолчанию и включить Kubernetes

Подключить kubectl

Установить kubectl .

Включить вход

Выполнить следующие команды:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud-generic.yaml

Редактировать: Убедитесь, что никакая другая служба не использует порт 80

Перезагрузите машину. Из приглашения cmd, запущенного от имени администратора, выполните: net stop http Остановите перечисленные службы, используя services.msc

Используйте: netstat -a -n -o -b и проверьте, не прослушивают ли другие процессы порт 80.

Создание развертывания

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello
spec:
  selector:
    matchLabels:
      app: hello
      version: 2.0.0
  replicas: 3
  template:
    metadata:
      labels:
        app: hello
        version: 2.0.0
    spec:
      containers:
      - name: hello
        image: "gcr.io/google-samples/hello-app:2.0"
        env:
        - name: "PORT"
          value: "50001"

Примените его, выполнив команду:

$ kubectl apply -f file_name.yaml

Создать службу

Чтобы модули могли общаться с ними, необходимо создать службу.

Пример ниже:

apiVersion: v1
kind: Service
metadata:
  name: hello-service
spec:
  type: NodePort
  selector:
    app: hello
    version: 2.0.0
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 50001

Примените это определение службы с помощью команды:

$ kubectl apply -f file_name.yaml

Создать ресурс Ingress

Ниже приведен простой ресурс Ingress с использованием службы, созданной выше:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hello-ingress 
spec:
  rules:
  - host: kubernetes.docker.internal
    http:
      paths:
      - path: /
        backend:
          serviceName: hello-service 
          servicePort: http

Взгляните на:

spec:
  rules:
  - host: hello-test.internal 

hello-test.internal будет использоваться как hostname для подключения к вашим модулям.

Примените свой ресурс Ingress, вызвав команду:

$ kubectl apply -f file_name.yaml

Добавьте хост в файл локальных хостов

Я нашел эту ссылку Github , который позволит вам подключиться к ресурсу Ingress с помощью hostname.

. Для этого добавьте строку 127.0.0.1 hello-test.internal в файл C:\Windows\System32\drivers\etc\hosts и сохраните ее. Для этого вам потребуются права администратора.

Редактировать: В новейшей версии Docker Desktop для Windows уже добавлена ​​запись файла хоста: 127.0.0.1 kubernetes.docker.internal

Test

Отображение информации о ресурсах Ingress с помощью команды: kubectl get ingress

Должно отобразиться:

NAME            HOSTS                 ADDRESS     PORTS   AGE
hello-ingress   hello-test.internal   localhost   80      6m2s

Теперь вы можете получить доступ к ресурсу Ingress, открыв веб-браузер и введите

http://kubernetes.docker.internal/

Браузер должен вывести:

Hello, world!
Version: 2.0.0
Hostname: hello-84d554cbdf-2lr76

Hostname: hello-84d554cbdf-2lr76 - это имя модуля, который ответил.

Если это решение не работает, проверьте соединения с помощью команды: netstat -a -n -o ( с правами администратора ), если что-то не использует порт 80.


...