Персональное облако для боковыхПроектов с Куберовщиком (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»