Я изучаю Kubernetes и испытываю большие затруднения в понимании использования имен / меток / селекторов и необходимости выравнивания имен модулей и контейнеров.
У меня есть настройка с. NET Core MVC Приложение, база данных PostgreSQL и обратный прокси Nginx.
Отлично работает с этим docker -compose.yml:
version: "3.7"
services:
reverseproxy:
build:
context: ./Nginx
dockerfile: ../Nginx.dockerfile
ports:
- "80:80"
- "443:443"
restart: always
db:
image: postgres:12.1-alpine
environment:
POSTGRES_PASSWORD: "mvcdbsecretpassword"
mvc:
depends_on:
- reverseproxy
- db
build:
context: .
dockerfile: ./MyMvc.dockerfile
environment:
ConnectionStrings.MyMvc: "Host=db;Port=5432;Database=MyMvcDb;Username=postgres;Password=mvcdbsecretpassword"
expose:
- "5000"
restart: always
MVC Контейнер приложения создается, помечается и помещается в мой реестр Docker. При запуске он регистрирует строку подключения и принимает настройки из файла docker -compose (очевидно - он работает в конце концов).
Я преобразовал это в шесть файлов yaml kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
labels:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:12.1-alpine
env:
- name: POSTGRES_PASSWORD
value: mvcdbsecretpassword
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
ports:
- name: "postgres"
port: 5432
targetPort: 5432
selector:
app: postgres
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mvc
labels:
name: mymvc
spec:
replicas: 1
selector:
matchLabels:
app: mymvc
template:
metadata:
labels:
app: mymvc
spec:
containers:
- name: mvc
image: mymvc:v2
env:
- name: ConnectionStrings.MyMvc
value: "Host=postgres;Port=5432;Database=MyMvcDb;Username=postgres;Password=mvcdbsecretpassword"
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: mvc
labels:
app: mymvc
spec:
ports:
- name: "mvc"
port: 5000
targetPort: 5000
selector:
app: mymvc
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: reverseproxy-deployment
labels:
app: mymvc
spec:
replicas: 1
selector:
matchLabels:
app: mymvc
template:
metadata:
labels:
app: mymvc
spec:
containers:
- name: reverseproxy
image: reverseproxy:v2
ports:
- containerPort: 80
- containerPort: 443
---
apiVersion: v1
kind: Service
metadata:
name: reverseproxy-service
labels:
app: mymvc
spec:
ports:
- name: "http"
port: 80
targetPort: 80
- name: "https"
port: 443
targetPort: 443
selector:
app: mymvc
type: LoadBalancer
Как уже говорилось ранее, я очень озадачен тем, когда использовать имена и когда использовать ярлыки.
Небольшое руководство будет высоко оценено.
РЕДАКТИРОВАТЬ: Дэвид Мэйз помог мне понять связь между именами, метками и селекторами. Файлы YAML обновляются соответствующим образом.
Я также добавил службу для приложения mvc, предоставляющего порт 5000.
Теперь модули больше не выходят из строя, но у меня все еще нет доступа к MVC app.
Полагаю, я должен упомянуть, что я пытаюсь запустить этот прогон на Docker Desktop на коробке Windows 10.
Обратный прокси имел смысл в стек Compose, но я больше не уверен, что это также имеет смысл в кластере Kubernetes, или если мне лучше настроить какой-нибудь контроллер Ingress.
Может кто-нибудь сказать мне, если это вообще возможно проверить эту настройку на Docker Рабочий стол?
Запуск kubectl get nodes -o wide
показывает, что нет внешнего IP, но я также не уверен, что кластер зеркально отображен на localhost.