Рубрики
Uncategorized

Запустить личное облако с Traefik, давайте шифровать и Работник зоопарка

Kubernetes Ingress с Traefik Как упоминалось в моем последнем сообщении в блоге, я хочу сосредоточиться на про … Помечено с Кубернетами, докером, дежопами, инфраструктурой.

Персональное облако для боковыхПроектов с Куберовщиком (6 серии деталей)

Как упоминалось в моем Последнее блог Post. Я хочу сосредоточиться на установке нейтральной настройки поставщика для моего собственного облака, используя технологию, которая не связана с каким возможным предложением облака.

Хотя Google Cloud предлагает нагрузку сбалансированного HTTP -ступа по умолчанию по умолчанию, по-видимому, очень дорого по сравнению с запуском небольших узлов, и я слышал только хорошие вещи по поводу использования Traefik для kubernetes Inhess.

Для настройки Traefik я следовал Отличное руководство Мануэля С незначительными модификациями (вы можете найти окончательные файлы в конце статьи.)

Traefik имеет встроенную поддержку для автоматического получения и продления сертификатов HTTPS с Давайте шифровать Отказ Поскольку HTTPS — это хорошая практика и требование к http2 и PWA в любом случае, я настроил его с помощью Пример конфигурации от Trafik Docs.

Поскольку я использовал только один узел для Trafik, который я решил пойти с легкой настройкой локального файла acme.json, который хранит сертификат, когда узел работает.

Чтобы сэкономить затраты, я решил использовать «предельных виртуальных машин», как узлы, чтобы включить мою кластер Kubernetes на GKE. Согласно документам Google: «Устраиваемые VMS — это экземпляры VM Google Compute Engine VM, которые длится максимум 24 часа и предоставляет никаких гарантий доступности. «Это означает, что узлы в моем кластере Kubernetes случайно уходят вниз и никогда не более 24 часов. Хотя это, очевидно, не является интеллектуальным решением для настройки производства, я решил обнимать его, и рассмотреть узлы, идущие по моему собственным «Хаос обезьяна» Это заставляет меня писать устойчивый код.

Бетонный пример, в котором я столкнулся с: Production Production Production имеет ограничение скорости 5 сертификатов для одного и того же URL в неделю. Потому что моя первоначальная наивная настройка не спасила сертификат где угодно, что он потерял, когда мой узел Traefik был прекращен. В то время как Traefik восстанавливает сертификат без какого-либо вопроса о запуске … После пяти запуска я ударил свой предел скорости и был встречен небезопасным предупреждением без сертификата.

Введите общий магазин ключа/стоимости для Trafik. Использование One требуется, если вы хотите запустить Traefik в режиме кластера в любом случае (и мне нравится думать, что моя настройка легко масштабируется). Это также означает, что я могу сохранить мой сгенерированный сертификат в магазине K/V, где он больше не будет просто исчезнуть, когда Traefik перезагрузится.

Поскольку у меня предыдущий опыт работы с зоофильем, и установка была относительно безболезненной, я пошел с ним.

Наконец, мясо блога пост, моя полная настройка в качестве файлов YAML, вы можете напрямую развернуть в своем кластере GKE:

Сначала установить Zookeeker

Из этого превосходного Ressource: https://github.com/kow3ns/kubernetes-zookeeper/blob/master/manifests/readme.md.

apiVersion: v1
kind: Service
metadata:
  name: zk-hs
  labels:
    app: zk
spec:
  ports:
  - port: 2888
    name: server
  - port: 3888
    name: leader-election
  clusterIP: None
  selector:
    app: zk
---
apiVersion: v1
kind: Service
metadata:
  name: zk-cs
  labels:
    app: zk
spec:
  ports:
  - port: 2181
    name: client
  selector:
    app: zk
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: zk
spec:
  serviceName: zk-hs
  replicas: 1
  podManagementPolicy: Parallel
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: zk
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                    - zk
              topologyKey: "kubernetes.io/hostname"
      containers:
      - name: kubernetes-zookeeper
        imagePullPolicy: Always
        image: "gcr.io/google_containers/kubernetes-zookeeper:1.0-3.4.10"
        resources:
          requests:
            memory: "200M"
            cpu: "0.3"
        ports:
        - containerPort: 2181
          name: client
        - containerPort: 2888
          name: server
        - containerPort: 3888
          name: leader-election
        command:
        - sh
        - -c
        - "start-zookeeper \
          --servers=1 \
          --data_dir=/var/lib/zookeeper/data \
          --data_log_dir=/var/lib/zookeeper/data/log \
          --conf_dir=/opt/zookeeper/conf \
          --client_port=2181 \
          --election_port=3888 \
          --server_port=2888 \
          --tick_time=2000 \
          --init_limit=10 \
          --sync_limit=5 \
          --heap=512M \
          --max_client_cnxns=60 \
          --snap_retain_count=3 \
          --purge_interval=12 \
          --max_session_timeout=40000 \
          --min_session_timeout=4000 \
          --log_level=INFO"
        readinessProbe:
          exec:
            command:
            - sh
            - -c
            - "zookeeper-ready 2181"
          initialDelaySeconds: 10
          timeoutSeconds: 5
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - "zookeeper-ready 2181"
          initialDelaySeconds: 10
          timeoutSeconds: 5
        volumeMounts:
        - name: datadir
          mountPath: /var/lib/zookeeper
      securityContext:
        runAsUser: 1000
        fsGroup: 1000
  volumeClaimTemplates:
  - metadata:
      name: datadir
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 5Gi

Разрешения для Трафики

# create Traefik cluster role
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
 name: traefik-ingress-controller
rules:
  - apiGroups:
      - ""
    resources:
      - services
      - endpoints
      - secrets
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - extensions
    resources:
      - ingresses
    verbs:
      - get
      - list
      - watch
---
# create Traefik service account
kind: ServiceAccount
apiVersion: v1
metadata:
  name: traefik-ingress-controller
  namespace: default
---
# bind role with service account
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: traefik-ingress-controller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: traefik-ingress-controller
subjects:
- kind: ServiceAccount
  name: traefik-ingress-controller
  namespace: default

Traefik Config

Обратите внимание на конфигурацию зоофитора с использованием сервисного адреса для «Client Service» (CS), а также с здесь Confight Config.

# define Traefik configuration
kind: ConfigMap
apiVersion: v1
metadata:
  name: traefik-config
data:
  traefik.toml: |
    # traefik.toml
    defaultEntryPoints = ["http", "https"]
    [entryPoints]
      [entryPoints.http]
        address = ":80"
        [entryPoints.http.redirect]
          entryPoint = "https"
      [entryPoints.https]
      address = ":443"
        [entryPoints.https.tls]

      [zookeeper]
        endpoint = "zk-cs.default.svc.cluster.local:2181"
        watch = true
        prefix = "traefik"

      [acme]
      email = "your@email.com"
      storage = "traefik/acme/account"
      onHostRule = true
      caServer = "https://acme-v02.api.letsencrypt.org/directory"
      acmeLogging = true
      entryPoint = "https"
        [acme.httpChallenge]
        entryPoint = "http"

      [[acme.domains]]
        main = "your.domain.com"

Развертывание для ТРАФИК

Я бегаю только одну реплику здесь, чтобы сохранить затраты в моей разработке Dev, но я также масштабировал его до трех, чтобы проверить, если бы он оставался на 100% времени, даже со случайными узлами, и все работает нормально:).

# declare Traefik deployment
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress-controller
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: traefik-ingress-controller
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60
      volumes:
        - name: config
          configMap:
            name: traefik-config
      containers:
      - name: traefik
        image: "traefik:1.7.14"
        volumeMounts:
          - mountPath: "/etc/traefik/config"
            name: config
        args:
        - --configfile=/etc/traefik/config/traefik.toml
        - --kubernetes
        - --logLevel=INFO

Traefik Service.

# Declare Traefik ingress service
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-controller
spec:
  selector:
    app: traefik-ingress-controller
  ports:
    - port: 80
      name: http
    - port: 443
      name: tls
  type: LoadBalancer

Окончательные нагрузки с Traefik и Zookeeper

И приподнятыми к кубетелями (игнорируйте приложение, которое я использовал в качестве демо-бизнеса для этого)

Я являюсь полным разработчиком стека и энтузиасту цифрового продукта, я доступен для внештатных работ и всегда ищете следующий захватывающий проект:).

Вы можете связаться со мной онлайн либо электронная почта (pheltweg@gmail.com) или в твиттере https://twitter.com/rhanarion .

Персональное облако для боковыхПроектов с Куберовщиком (6 серии деталей)

Оригинал: «https://dev.to/rhanarion/run-a-personal-cloud-with-traefik-let-s-encrypt-and-zookeeper-4a7g»