Конфигурация kubernetes (развертывание / сервис) для микросервисов
У меня есть архитектура микросервисов, и я хотел бы знать, как лучше всего настроить ее в моем кластере kubernetes
это моя архитектура:
Фронт
- 2 интерфейсных веб-приложения: 1 для пользователя, 1 для backoffice
- Framework: Vuejs с квазар-фреймворком (приложение PWA)
- 2 интерфейсных веб-приложения: 1 для пользователя, 1 для backoffice
назад
- 2 apis
- Framework: Symfony (платформа API)
- RabbitMq для сообщения очереди
- ElasticSearch / Kibana
- Mysql
- лакировка
- 2 apis
Для развертывания в производстве я использую Gitlab-ci. Я использую GKE для управления своим кластером Kubernetes
Я уже развернул входной контроллер Nginx в своем кластере kubernetes (с рулевой колонкой)
Каков наилучший способ развернуть это?
Для развертывания Apis Backend мое решение выглядит следующим образом:
=> deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment
namespace: staging
labels:
app: api
spec:
replicas: 3
selector:
matchLabels:
app: api
progressDeadlineSeconds: 300 #second to failed status if deployment error
# Pod template
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: ${IMAGE_TAG}
imagePullPolicy: Always
ports:
- containerPort: 9000
=> service.yml
apiVersion: v1
kind: Service
metadata:
name: api-service
namespace: staging
labels:
app: api
spec:
selector:
app: api
ports:
- port: 9000
protocol: TCP
targetPort: 9000
=> ingress.yml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: api-ingress
namespace: staging
annotations:
kubernetes.io/ingress.class: nginx
labels:
app: api
spec:
rules:
- host: staging.api.example.com
http:
paths:
- backend:
serviceName: api-service
servicePort: 80
path: /
=> configMap.yml
kind: ConfigMap
apiVersion: v1
metadata:
name: api-nginx-config
data:
nginx.conf: |
server {
root /srv/api/web;
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass api-service:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
# return 404 for all other php files not matching the front controller
# this prevents access to other php files you don't want to be accessible.
location ~ \.php$ {
return 404;
}
}
Для развертывания моего второго API я использую тот же конфиг, но я меняю имя, селекторы и порт, как это
api => api2
=> service.yml
apiVersion: v1
kind: Service
metadata:
name: api2-service
namespace: staging
labels:
app: api2
spec:
selector:
app: api2
ports:
- port: 9001
protocol: TCP
targetPort: 9000
=> configMap.yml
kind: ConfigMap
apiVersion: v1
metadata:
name: api2-nginx-config
data:
nginx.conf: |
server {
root /srv/api/web;
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass api2-service:9001;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
# return 404 for all other php files not matching the front controller
# this prevents access to other php files you don't want to be accessible.
location ~ \.php$ {
return 404;
}
}
Чтобы развернуть ElasticSearch, Mysql и RabbitMq, могу ли я просто использовать сервис и развертывание (не нужно входить)?
Мое решение кажется вам хорошим или нет?
Спасибо