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