Автор оригинала: Vyacheslav.
Это следующее в мою местную среду разработки Docker, описанную здесь https://github.com/voronenko/traefik2-compose-template. В дополнение к классическим докеренным проектам у меня также есть количество проектов Kubernetes. Kubernetes — это как ресурсная и потребляющая платформа. Поскольку мне не всегда нужен внешний кластер, решение, которое я использую для местного развития для Kubernetes, является https://k3s.io/.
Эта платформа позиционирует себя как легкий кубернаны, но правда в том, что это одна из самых маленьких сертифицированных распределения Kubernetes, построенных для вычислений IOT & EDGE, способных также развернуть в шкале Prod в VMS.
Я использую K3S двумя способами: У меня есть K3S локально на моей рабочей ноутбуке, хотя иногда мне нужно развернуть локально более тяжелые рабочие нагрузки, и для этой цели у меня есть два маленьких звери — два внешних ящики Intel, работающие esxi.
По умолчанию K3S устанавливается с Trafik1 в качестве входа, и если вы удовлетворены этой настройкой, вы обычно можете прекратить чтение статьи.
В моем сценарии я участвую в нескольких проектах, в частности классический докер и докер рой, и поэтому у меня часто есть ситуация, когда Traefik развернут в автономном режиме.
Поэтому остальная часть этой статьи погружает в настройку внешнего TRAEFIK2 в качестве входа для кластера K3S.
Установка семейного кластера Kubernetes K3S.
Вы можете начать с Classic Curl -sfl https://get.k3s.io | Ш -
Или вы можете использовать утилиту легкого веса K3SUP, написанную https://github.com/alexellis/k3sup.
Что было бы по-другому для нашей настройки, заключается в том, что мы специально устанавливаем K3S без Traefik Component с помощью переключателя - Нет-развертывание Traefik
export CLUSTER_MASTER=192.168.3.100 export CLUSTER_DEPLOY_USER=slavko k3sup install --ip $CLUSTER_MASTER --user $CLUSTER_DEPLOY_USER --k3s-extra-args '--no-deploy traefik'
В результате выполнения вы получите данные подключения, необходимые для использования Kubectl. После установки K3S вы можете быстро проверить, можно ли вы увидеть узлы
# Test your cluster with - export path to k3s cluster kubeconfig: export KUBECONFIG=/home/slavko/kubeconfig kubectl get node -o wide
Сбочная нота — нет конкретной магии с ароматом K3S Kubernetes. Вы даже можете начать его самостоятельно с помощью Docker-Compose
server: image: rancher/k3s:v0.8.0 command: server --disable-agent --no-deploy traefik environment: - K3S_CLUSTER_SECRET=somethingtotallyrandom - K3S_KUBECONFIG_OUTPUT=/output/kubeconfig.yaml - K3S_KUBECONFIG_MODE=666 volumes: # k3s will generate a kubeconfig.yaml in this directory. This volume is mounted # on your host, so you can then 'export KUBECONFIG=/somewhere/on/your/host/out/kubeconfig.yaml', # in order for your kubectl commands to work. - /somewhere/on/your/host/out:/output # This directory is where you put all the (yaml) configuration files of # the Kubernetes resources. - /somewhere/on/your/host/in:/var/lib/rancher/k3s/server/manifests ports: - 6443:6443 node: image: rancher/k3s:v0.8.0 privileged: true links: - server environment: - K3S_URL=https://server:6443 - K3S_CLUSTER_SECRET=somethingtotallyrandom volumes: # this is where you would place a alternative traefik image (saved as a .tar file with # 'docker save'), if you want to use it, instead of the traefik:v2.0 image. - /sowewhere/on/your/host/custom-image:/var/lib/rancher/k3s/agent/images
Настройка TRAEFIK2 для работы с Kubernetes.
Когда вы вспомните, к тому времени у меня обычно есть Traefik2, уже присутствовав в моей системе, и обслуживаю некоторые потребности в соответствии с https://github.com/voronenko/traefik2-compose-template. Теперь пришло время настроить Backend Traefik2 Kubernetes.
Traefik2 делает это использование CRD — CAST — Custom Conception Conception (https://kubernetes.io/docs/conepts/extend-kubernetes/ap-extension/custom-resources/). Последние примеры определений всегда можно найти по ссылке https://docs.traefik.io/reference/dynamic-configuration/kubernetes-crd/, но имеются для сценария, когда Traefik2 также выполняется как часть рабочей нагрузки Kubernetes Отказ
Для сценария внешнего TRAEFIK2 нам нужно только подмножество определений, описанных ниже.
Мы представляем набор пользовательских определений ресурсов, позволяющих нам описать, как наша служба Kubernetes будет выставлена снаружи, Traefik-Crd.yaml
:
apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: ingressroutes.traefik.containo.us spec: group: traefik.containo.us version: v1alpha1 names: kind: IngressRoute plural: ingressroutes singular: ingressroute scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: ingressroutetcps.traefik.containo.us spec: group: traefik.containo.us version: v1alpha1 names: kind: IngressRouteTCP plural: ingressroutetcps singular: ingressroutetcp scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: middlewares.traefik.containo.us spec: group: traefik.containo.us version: v1alpha1 names: kind: Middleware plural: middlewares singular: middleware scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: tlsoptions.traefik.containo.us spec: group: traefik.containo.us version: v1alpha1 names: kind: TLSOption plural: tlsoptions singular: tlsoption scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: traefikservices.traefik.containo.us spec: group: traefik.containo.us version: v1alpha1 names: kind: TraefikService plural: traefikservices singular: traefikservice scope: Namespaced
Нам также нужна роль кластера Traefik-Ingress-контроллер
Предоставление в основном доступ к услугам, конечным точкам и секретам и на заказ Traefik.containo.us
Группа, Traefik-Clusterrole.yaml.
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 - apiGroups: - extensions resources: - ingresses/status verbs: - update - apiGroups: - traefik.containo.us resources: - middlewares verbs: - get - list - watch - apiGroups: - traefik.containo.us resources: - ingressroutes verbs: - get - list - watch - apiGroups: - traefik.containo.us resources: - ingressroutetcps verbs: - get - list - watch - apiGroups: - traefik.containo.us resources: - tlsoptions verbs: - get - list - watch - apiGroups: - traefik.containo.us resources: - traefikservices verbs: - get - list - watch
И, наконец, нам нужна учетная запись System Service Traefik-Ingress-контроллер
связано с ранее созданным Traefik-Ingress-контроллер
роль кластера
--- kind: ServiceAccount apiVersion: v1 metadata: namespace: kube-system name: traefik-ingress-controller --- 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: kube-system
Как только мы применяем ресурсы выше
apply: kubectl apply -f traefik-crd.yaml kubectl apply -f traefik-clusterrole.yaml kubectl apply -f traefik-service-account.yaml
Мы готовы начать тюнинг Traefik2
Указывая Traefik2 до кластера K3S
При развертывании в Кубернаны, как рекомендуется Traefik Docs, Traefik будет прочитать переменные среды Kubernetes_Service_Host и Kubernetes_Service_Port или KubeConfig, чтобы построить конечную точку.
Токен доступа будет выглядеть в/var/run/secrets/kubernetes.io/secrets/kubernetes.io/serviceAccount/totken и сертификат SSL CA в/var/run/secrets/kubernetes.io/serviceакccount/ca.crt. Оба предоставляются автоматически при развертывании внутри Kubernetes.
Когда переменные среды не найдены, TRAEFIK попытается подключиться к серверу API Kubernetes с клиентом внешнего кластера. В этом случае конечная точка обязательна. В частности, он может быть установлен на URL, используемый Kubectl Proxy для подключения к кластеру Kubernetes, используя предоставленную аутентификацию и авторизацию связанного kubeconfig.
TRAEFIK2 может быть статически сконфигурирован с использованием любых типов поддерживаемых конфигураций — TOML, YAML или коммутаторов командной линии.
[providers.kubernetesCRD] endpoint = "http://localhost:8080" token = "mytoken"
providers: kubernetesCRD: endpoint = "http://localhost:8080" token = "mytoken" # ...
--providers.kubernetescrd.endpoint=http://localhost:8080 --providers.kubernetescrd.token=mytoken
На первый пробег, если у вас есть Traefik снаружи, скорее всего, вы не будете иметь токены доступа для Traefik-Ingress-контроллер
указать mytoken. Открыть один:
# Check all possible clusters, as your .KUBECONFIG may have multiple contexts: kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}' # Output kind of # Alias tip: k config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}' # Cluster name Server # default https://127.0.0.1:6443 # You are interested in: "default", if you did not name it differently # Select name of cluster you want to interact with from above output: export CLUSTER_NAME="default" # Point to the API server referring the cluster name export APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}") # usually https://127.0.0.1:6443 # Gets the token value export TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='traefik-ingress-controller')].data.token}" --namespace kube-system|base64 --decode) # Explore the API with TOKEN curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
Если хорошо, вы должны получить успешный ответ, вид
{ "kind": "APIVersions", "versions": [ "v1" ], "serverAddressByClientCIDRs": [ { "clientCIDR": "0.0.0.0/0", "serverAddress": "192.168.3.100:6443" } ]
и некоторые факты, как токен
eyJhbGciOiJSUzI1NiIsImtpZCI6IjBUeTQyNm5nakVWbW5PaTRRbDhucGlPeWhlTHhxTXZjUDJsRmNacURjVnMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJ0cmFlZmlrLWluZ3Jlc3MtY29udHJvbGxlci10b2tlbi12emM3diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJ0cmFlZmlrLWluZ3Jlc3MtY29udHJvbGxlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImQ5NTc3ZTkxLTdlNjQtNGMwNi1iZDgyLWNkZTk0OWM4MTI1MSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTp0cmFlZmlrLWluZ3Jlc3MtY29udHJvbGxlciJ9.Mk8EBS4soO8uX-uSnV3o4qZKR6Iw6bgeSmPhHbJ2fjuqFgLnLh4ggxa-N9AqmCsEWiYjSi5oKAu986UEC-_kGQh3xaCYsUwlkM8147fsnwCbomSeGIct14JztVL9F8JwoDH6T0BOEjn-J9uY8-fUKYL_Y7uTrilhFapuILPsj_bFfgIeOOapRD0XshKBQV9Qzg8URxyQyfzl68ilm1Q13h3jLj8CFE2RlgEUFk8TqYH4T4fhfpvV-gNdmKJGODsJDI1hOuWUtBaH_ce9w6woC9K88O3FLKVi7fbvlDFrFoJ2iVZbrRALPjoFN92VA7a6R3pXUbKebTI3aUJiXyfXRQ
Внешний адрес API Server https://192.168.3.100:6443
в соответствии с последним ответом
Опять же, ничего магического в предоставленном знаке: это токен JWT, и вы можете использовать https://jwt.io/#debugger-io, чтобы осмотреть его содержание
{ "alg": "RS256", "kid": "0Ty426ngjEVmnOi4Ql8npiOyheLxqMvcP2lFcZqDcVs" } { "iss": "kubernetes/serviceaccount", "kubernetes.io/serviceaccount/namespace": "kube-system", "kubernetes.io/serviceaccount/secret.name": "traefik-ingress-controller-token-vzc7v", "kubernetes.io/serviceaccount/service-account.name": "traefik-ingress-controller", "kubernetes.io/serviceaccount/service-account.uid": "d9577e91-7e64-4c06-bd82-cde949c81251", "sub": "system:serviceaccount:kube-system:traefik-ingress-controller" }
Как правильная конфигурация вполне важен, убедитесь, что оба призывы к Apiserver возвращают разумный ответ.
export APISERVER=YOURAPISERVER export TOKEN=YOURTOKEN curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure curl -X GET $APISERVER/api/v1/endpoints --header "Authorization: Bearer $TOKEN" --insecure
Создание дополнительного доступа токен
Контроллерный цикл обеспечивает секрет с токеном API для каждой учетной записи службы, которые можно обнаружить, как и ранее. Также вы можете создавать дополнительные токены API для сервисной учетной записи, создать секрет типа ServiceAccountToken с аннотацией, ссылаясь на учетную запись службы, а контроллер обновит его с генерируемым токеном:
--- apiVersion: v1 kind: Secret namespace: kube-system metadata: name: traefik-manual-token annotations: kubernetes.io/service-account.name: traefik-ingress-controller type: kubernetes.io/service-account-token # Any tokens for non-existent service accounts will be cleaned up by the token controller. # kubectl describe secrets/traefik-manual-token
создать
kubectl create -f ./traefik-service-account-secret.yaml kubectl describe secret traefik-manual-token
удалить/недействителен
kubectl delete secret traefik-manual-token
Изменения на внешний TRAEFIK V2 составляют определения
Какие изменения нам нужно добавить в конфигурацию Traefik2, у нас есть на https://github.com/voronenko/traefik2-compose-template?
а) новая папка Kubernetes_data
Где мы храним ca.crt
файл, используемый для проверки вызовов в органу Kubernetes. Это сертификат которые можно найти под кластерами-> кластерами-> сертификатами-авторитетами-данными вашего файла Kubeconfig.
Этот том будет сопоставлен под /var/run/secrets/kubernetes.io/serviceaccount
Для официального изображения Traefik2
volumes: ... - ./kubernetes_data:/var/run/secrets/kubernetes.io/serviceaccount
и b) Отрегулируйте бэкэкс Traefik2 KubernetesCrd, предоставляя 3 параметра: конечная точка, путь к сертификату и токену. Обратите внимание, что, как ваш внешний Traefik в качестве контейнера Docker, вам нужно указать правильную доступную адрес конечной точки, и убедитесь, что вы делаете это в + — безопасный способ.
- "--providers.kubernetescrd=true" - "--providers.kubernetescrd.endpoint=https://192.168.3.100:6443" - "--providers.kubernetescrd.certauthfilepath=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" - "--providers.kubernetescrd.token=YOURTOKENWITHOUTANYQUOTES
Если вы сделали все правильно, вы должны увидеть сейчас что-то многообещающее на вашем Traefik UI
Если вы не видите один или у вас есть проблемы с выполнением проверки проверки Traefik UP.
Теперь пришло время выставлять некоторые услуги Kubernetes через Traefik2, чтобы гарантировать, что Traefik2 на самом деле работает как вход. Давайте возьмем нашу классику WHOAMI
Сервис, WHOAMI-SERVICE.YAML
apiVersion: v1 kind: Service metadata: name: whoami spec: ports: - protocol: TCP name: web port: 80 selector: app: whoami --- kind: Deployment apiVersion: apps/v1 metadata: namespace: default name: whoami labels: app: whoami spec: replicas: 2 selector: matchLabels: app: whoami template: metadata: labels: app: whoami spec: containers: - name: whoami image: containous/whoami ports: - name: web containerPort: 80
и разоблачить его на http или https путь, Whoami-Ingress-Tranue.yaml
под whoami.k.voronenko.net
FQDN.
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: ingressroute-notls namespace: default spec: entryPoints: - web routes: - match: Host(`whoami.k.voronenko.net`) kind: Rule services: - name: whoami port: 80 --- apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: ingressroute-tls namespace: default spec: entryPoints: - websecure routes: - match: Host(`whoami.k.voronenko.net`) kind: Rule services: - name: whoami port: 80 tls: certResolver: default
и применить это:
kubectl apply -f whoami-service.yaml kubectl apply -f whoami-ingress-route.yaml
После того, как применимо, вы должны увидеть SMTH Operation на приборной панели Traefik, а именно KubernetesCrd Backend
Как вы видите, Traefik2 обнаружил нашу новую рабочую нагрузку, работающую на наших кластере K3S Kubernetes, и, кроме того, хорошо совместно существует с классическими рабочими нагрузками Docker, у нас есть в том же ящике, например, Portainer.
Давайте проверим, правила ли Traefik2 Trafik в нашу рабочую нагрузку Kubernetes: как вы видите, вы можете успешно добраться до рабочей нагрузки WHOAMI на конечных точках HTTP, так и для HTTPS, и в браузере HTTP и HTTPS принимают ваш сертификат как доверенное герметичность.
Yooohoo, мы достигли нашей цели. У нас есть Traefik2 настроен либо на ваш локальный ноутбук, либо, возможно, какой-то выделенный машиной в вашем Homelab. Traefik2 выставляет ваш рабочий процесс Docker или Kubernetes на конечных точках HTTP или HTTPS. Traefik2 с дополнительным летанием несет ответственность за HTTPS.
Исправление проблем
Как вы понимаете, могут быть несколько вопросов. Рассмотрим некоторые из инструментов для анализа https://github.com/voronenko/dotfiles/blob/master/makefile#l185
В частности, я рекомендую:
a) VMware Othant — Мощная панель инструментов Kubernets Cubernetes, которая начинает использовать ваш kubeconfig
b) Rakess — https://github.com/corneliusweig/rakkess Автономный инструмент, а также плагин Kubectl, чтобы показать матрицу доступа для ресурсов сервера K8S
Осмотрите учетные данные для системного счета
rakkess --sa kube-system:traefik-ingress-controller
в) просто kubectl
Обратная задача: проверьте, какие роли связаны с учетной записью службы
kubectl get clusterrolebindings -o json | jq -r ' .items[] | select( .subjects // [] | .[] | [.kind,.namespace,.name] == ["ServiceAccount","kube-system","traefik-ingress-controller"] ) | .metadata.name'
d) Traefik Docs — например, kubernetescrd Backend имеет способ больше конфигурации коммутаторов.
--providers.kubernetescrd (Default: "false") Enable Kubernetes backend with default settings. --providers.kubernetescrd.certauthfilepath (Default: "") Kubernetes certificate authority file path (not needed for in-cluster client). --providers.kubernetescrd.disablepasshostheaders (Default: "false") Kubernetes disable PassHost Headers. --providers.kubernetescrd.endpoint (Default: "") Kubernetes server endpoint (required for external cluster client). --providers.kubernetescrd.ingressclass (Default: "") Value of kubernetes.io/ingress.class annotation to watch for. --providers.kubernetescrd.labelselector (Default: "") Kubernetes label selector to use. --providers.kubernetescrd.namespaces (Default: "") Kubernetes namespaces. --providers.kubernetescrd.throttleduration (Default: "0") Ingress refresh throttle duration --providers.kubernetescrd.token (Default: "") Kubernetes bearer token (not needed for in-cluster client). --providers.kubernetesingress (Default: "false") Enable Kubernetes backend with default settings. --providers.kubernetesingress.certauthfilepath (Default: "") Kubernetes certificate authority file path (not needed for in-cluster client). --providers.kubernetesingress.disablepasshostheaders (Default: "false") Kubernetes disable PassHost Headers. --providers.kubernetesingress.endpoint (Default: "") Kubernetes server endpoint (required for external cluster client). --providers.kubernetesingress.ingressclass (Default: "") Value of kubernetes.io/ingress.class annotation to watch for. --providers.kubernetesingress.ingressendpoint.hostname (Default: "") Hostname used for Kubernetes Ingress endpoints. --providers.kubernetesingress.ingressendpoint.ip (Default: "") IP used for Kubernetes Ingress endpoints. --providers.kubernetesingress.ingressendpoint.publishedservice (Default: "") Published Kubernetes Service to copy status from. --providers.kubernetesingress.labelselector (Default: "") Kubernetes Ingress label selector to use. --providers.kubernetesingress.namespaces (Default: "") Kubernetes namespaces. --providers.kubernetesingress.throttleduration (Default: "0") Ingress refresh throttle duration --providers.kubernetesingress.token (Default: "") Kubernetes bearer token (not needed for in-cluster client).
e) Убедитесь, что Traefik имеет достаточно прав на доступ к конечным точкам Apiserver.
Если вы заинтересованы, какая информация запрашивается Trafik: вы можете увидеть доступ к конечным точкам и порядку Queriiing, поместив неверный адрес APISERVER в конфигурации. Имея эти знания, и ваш токен Traefik Kubernetes вы можете проверить, что эти конечные точки доступны с использованием учетных данных Traefik
traefik_1 | E0421 12:30:12.624877 1 reflector.go:125] pkg/mod/k8s.io/client-go@v0.0.0-20190718183610-8e956561bbf5/tools/cache/reflector.go:98: Failed to list *v1.Endpoints: Get https://192.168.3.101:6443/api/v1/endpoints?limit=500&resourceVersion=0: traefik_1 | E0421 12:30:12.625341 1 reflector.go:125] pkg/mod/k8s.io/client-go@v0.0.0-20190718183610-8e956561bbf5/tools/cache/reflector.go:98: Failed to list *v1.Service: Get https://192.168.3.101:6443/api/v1/services?limit=500&resourceVersion=0: traefik_1 | E0421 12:30:12.625395 1 reflector.go:125] pkg/mod/k8s.io/client-go@v0.0.0-20190718183610-8e956561bbf5/tools/cache/reflector.go:98: Failed to list *v1beta1.Ingress: Get https://192.168.3.101:6443/apis/extensions/v1beta1/ingresses?limit=500&resourceVersion=0: traefik_1 | E0421 12:30:12.625449 1 reflector.go:125] pkg/mod/k8s.io/client-go@v0.0.0-20190718183610-8e956561bbf5/tools/cache/reflector.go:98: Failed to list *v1alpha1.Middleware: Get https://192.168.3.101:6443/apis/traefik.containo.us/v1alpha1/middlewares?limit=500&resourceVersion=0: traefik_1 | E0421 12:30:12.625492 1 reflector.go:125] pkg/mod/k8s.io/client-go@v0.0.0-20190718183610-8e956561bbf5/tools/cache/reflector.go:98: Failed to list *v1alpha1.IngressRoute: Get https://192.168.3.101:6443/apis/traefik.containo.us/v1alpha1/ingressroutes?limit=500&resourceVersion=0: traefik_1 | E0421 12:30:12.625531 1 reflector.go:125] pkg/mod/k8s.io/client-go@v0.0.0-20190718183610-8e956561bbf5/tools/cache/reflector.go:98: Failed to list *v1alpha1.TraefikService: Get https://192.168.3.101:6443/apis/traefik.containo.us/v1alpha1/traefikservices?limit=500&resourceVersion=0: traefik_1 | E0421 12:30:12.625572 1 reflector.go:125] pkg/mod/k8s.io/client-go@v0.0.0-20190718183610-8e956561bbf5/tools/cache/reflector.go:98: Failed to list *v1alpha1.TLSOption: Get https://192.168.3.101:6443/apis/traefik.containo.us/v1alpha1/tlsoptions?limit=500&resourceVersion=0: traefik_1 | E0421 12:30:12.625610 1 reflector.go:125] pkg/mod/k8s.io/client-go@v0.0.0-20190718183610-8e956561bbf5/tools/cache/reflector.go:98: Failed to list *v1alpha1.IngressRouteTCP: Get https://192.168.3.101:6443/apis/traefik.containo.us/v1alpha1/ingressroutetcps?limit=500&resourceVersion=0:
е) k3s logs сам
Сценарий установки будет автоматически обнаруживать, использует ли ваша ОС SystemD или OpenRC и начать службу. При работе с OpenRC журналы будут созданы на/var/log/k3s.log. При работе с SystemD Logs будет создан в/var/log/syslog и просматривается с использованием designCtl -u k3s.
Там вы можете получить некоторые намеки, как
кві 21 15:42:44 u18d k3s[612]: E0421 15:42:44.936960 612 authentication.go:104] Unable to authenticate the request due to an error: invalid bearer token
который предоставил бы вам Подсказка на Traefik Startups выпускается с K8S
Удачи в вашем путешествии!
Связанный код можно найти на https://github.com/voronenko/k3s-mini
Оригинал: «https://www.codementor.io/@slavko/unobtrusive-local-development-with-kubernetes-k3s-traefik2-15uq596oja»