Рубрики
Uncategorized

Безопасный серверу с OpenFAAS

В ходе моей карьеры в качестве профессионала в программной индустрии я был свидетелем подъема древоприводов. Спор … Помечено с Куберовщиком, серверущими, DevOps.

Установка Homelab (8 Часть серии)

В ходе моей карьеры в качестве профессионала в программной индустрии я был свидетелем подъема древоприводов. DevOps — это практика слияния вашей команды развития (программистов) с вашей операционной командой (думаю, что администраторы сервера и Net-Ops Guys).

Во время изучения о серверах есть свои взлеты и падения. Вы можете отпраздновать триумфы, наконец, затягивая вашу хостинговую платформу и запуску при работе с разочарованием, которая является нюантом файлов конфигурации. Вероятно, безопасно сказать, что, когда вы участвуете в колледже или обучении Boot-Camp, чтобы стать разработчиком, ваш идеальный день в жизни не наращивает вашу платформу разработки и проводить несколько дней с помощью файлов конфигурации и разрешения ACL при надеждении Ваш сервис подходит в конце.

Введите Serverless

Serverless — это шумное слово в наши дни, которые часто часто получают неправильностей. Неверно означает, что нет серверов? Наоборот. В неверной платформе есть серверы. Основное отличие состоит в том, что нет сервера, который вы должны активно управлять. Любые сервисы, развернутые на неверной платформе, масштабируются и выполняются, когда они запрашиваются и масштабируются после завершения выполнения, и обслуживание больше не требуется.

Самая большая выплата с этой архитектурой с точки зрения развития заключается в том, что вам больше не нужно беспокоиться о предоставлении инфраструктуры. Вместо этого вы указываете тип события (I.E. HTTP-запрос, шина сообщений, триггера CRON) и функция обработчика (ваш код) и платформа создают приложение в контейнере и обрабатывает для вас выполнение.

Где OpenFAAS вписывается в это?

Openfaas это услуга, которая позволяет вам развертывать функции без сервера в надежной облачной среде (то есть kubernetes). Этот учебник будет охватывать, как развернуть OpenFAAS в Kubernetes и настроить портал с аутентификацией.

⚠ Метод аутентификации, используемый в этом руководстве, официально не поддерживается OpenFAAS. Я использую Edition сообщества с открытым исходным кодом. Для поддержки OIDC или OAUTH вам нужна лицензия предприятия.

Настройка OpenFAAS

Openfaas предоставляет Хелм диаграммы Что можно быстро использовать для настройки развертывания openfaas Kubernetes. Этот учебник будет использовать комбинацию графики HELM OpenFAAS и OAUTH2 прокси Диаграмма для настройки аутентификации с помощью KeyCloak

OAUTH2 набор прокси

Предполагая, что у вас есть настроен на KeyCloak Server и зарегистрировал новый клиент к вашему царстве KeyCloak, вам понадобится идентификатор клиента и секрет клиента, чтобы настроить прокси OAUTH.

Следующая предсказанная задача может помочь в создании клиента на KeyCloak.

    - name: Create Keycloak client
      community.general.keycloak_client:
        state: present
        auth_client_id: admin-cli
        auth_keycloak_url: "{{ keycloak_server }}/auth"
        auth_username: "{{ keycloak_user }}"
        auth_password: "{{ keycloak_password }}"
        auth_realm: master
        name: Openfaas Portal
        client_id: openfaas
        client_authenticator_type: client-secret
        secret: "{{ client_secret }}"
        realm: hausnet
        protocol_mappers:
          - config:
              included.client.audience: "openfaas-portal"
              id.token.claim: "false"
              access.token.claim: "true"
            name: openfaas-portal-mapper
            protocol: openid-connect
            protocolMapper: oidc-audience-mapper
          - name: "openfaas-group-mapper"
            protocol: "openid-connect"
            protocolMapper: "oidc-group-membership-mapper"
            config: 
              id.token.claim: "true"
              access.token.claim: "true"
              claim.name: "groups"
              userinfo.token.claim: "true"
        redirect_uris:
          - "{{ openfaas_endpoint }}/*"
        web_origins:
          - "*"
        validate_certs: no

ℹ Переменные в использовании несбежной ролью

  • OpenFaas_endpoint URL-адрес какие Openfaas будут слушать
  • keycloak_server URL-адрес где keycloak будет слушать
  • keycloak_user Имя пользователя, используемое для аутентификации с помощью KeyCloak Для того, чтобы создать клиент KeyCloak
  • keycloak_password Пароль пользователя используется для аутентификации с помощью KeyCloak Для того, чтобы создать клиент KeyCloak
  • Client_Secret Секрет используется для аутентификации. Это значение будет установлено, когда клиент создан в KeyCloak

Следующий график демонстрирует, как настроить прокси OAUTH с использованием террафора.

resource "helm_release" "rel_oauth2_proxy" {
  repository = "https://k8s-at-home.com/charts/"
  chart = "oauth2-proxy"
  name = "auth"
  namespace = "openfaas"

  values = [ 
    <

Client_id , Client_Secret , keycloak и царство переменные, которые предоставляются с использованием Переменные террафора

Развертывание OpenFAAS

С развернутым прокси OAUTT2, сейчас время развертывать OpenFAAS

resource "helm_release" "rel_openfaas" {
  repository = "https://openfaas.github.io/faas-netes/"
  name = "openfaas"
  chart="openfaas"
  namespace = "openfaas"

  set {
      name = "functionNamespace"
      value = "openfaas-fn"
  }

  set {
      name = "generateBasicAuth"
      value = "false"
  }

  set {
      name = "basic_auth"
      value = "false"
  }

  set {
      name = "serviceType"
      value = "ClusterIP"
  }
}

⚠ Openfaas имеет Официальный метод обработки OIDC/Аутентификация ОАУТ ; Однако это за платной стеной. Здесь мы отключаем аутентификацию, поскольку наш OAUTH2 Proxy Outsource, созданный на предыдущем шаге OAUTH2.

Мы настроили попадание Kubernetes, чтобы открыть доступ к OpenFAAS через наш прокси OAUTT2. Ниже приведен пример того, как настроить вход, используя Kubernetes, манифесты:

apiVersion: networking.k8s.io/v1
kind: Ingress 
metadata:
  name: openfaas-gateway
  namespace: openfaas
  annotations:
    kubernetes.io/ingress-class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$escaped_request_uri"
    cert-manager.io/cluster-issuer: cluster-issuer
    nginx.ingress.kubernetes.io/upstream-vhost: $service_name.$namespace.svc.cluster.local:8080
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Origin "";
      proxy_hide_header l5d-remote-ip;
      proxy_hide_header l5d-server-id;
spec:
  rules:
    - host: "functions.haus.net"
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: gateway
                port:
                  number: 8080
  tls:
    - hosts:
      - "functions.haus.net"
      secretName: openfaas-tls-cert

Как только развертывание завершится, OpenFAAS должен быть доступен с конечной точки входа. В этом примере я установил конечную точку для https://functions.haus.net Отказ

Установка Homelab (8 Часть серии)

Оригинал: «https://dev.to/mikeyglitz/secure-serverless-with-openfaas-509b»