Как обсуждалось в комментариях, это ответ сообщества на вики:
Мне удалось создать ресурс Ingress в Куберне на Docker в Windows.
Действия по воспроизведению :
- Включение Hyper-V
- Установка Docker для Windows и включение Kubernetes
- Connect kubectl
- Включить вход
- Создать развертывание
- Создать службу
- Создать входной ресурс
- Добавить хост в файл локальных хостов
- Тест
Из 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.