Конфигурация kubernetes (развертывание / сервис) для микросервисов

У меня есть архитектура микросервисов, и я хотел бы знать, как лучше всего настроить ее в моем кластере kubernetes

это моя архитектура:

  • Фронт

    • 2 интерфейсных веб-приложения: 1 для пользователя, 1 для backoffice
      • Framework: Vuejs с квазар-фреймворком (приложение PWA)
  • назад

    • 2 apis
      • Framework: Symfony (платформа API)
      • RabbitMq для сообщения очереди
      • ElasticSearch / Kibana
      • Mysql
      • лакировка

Для развертывания в производстве я использую 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, могу ли я просто использовать сервис и развертывание (не нужно входить)?

Мое решение кажется вам хорошим или нет?

Спасибо

0 ответов

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