我有带 Docker 的服务器并打开 80 端口。
我使用 Traefik 在容器之间重定向。我想托管 PostgreSQL 数据库。使用此设置启动容器后:
postgresql:
image: orchardup/postgresql
environment:
- "POSTGRESQL_PASS=***"
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Path:/postgresql/"
Run Code Online (Sandbox Code Playgroud)
但不是工作
我究竟做错了什么?
我正在尝试用密码保护应用程序的特定路径,但似乎我遗漏了一些东西,并且 traefik 文档没有帮助:
从 docker-compose 粘贴:
command:
- "--log.level=INFO"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.letsencrypt.acme.email=email@email.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme.json"
Run Code Online (Sandbox Code Playgroud)
labels:
- "traefik.enable=true"
- "traefik.http.routers.service.middlewares=service"
- "traefik.http.routers.service.rule=Host(`domain.example.com`)"
- "traefik.http.middlewares.service.headers.stsSeconds=31536000"
- "traefik.http.middlewares.service.headers.forceSTSHeader=true"
- "traefik.http.middlewares.service.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.service.headers.stsPreload=true"
- "traefik.http.middlewares.service.headers.referrerPolicy=no-referrer"
- "traefik.http.middlewares.service.headers.browserXssFilter=true"
- "traefik.http.middlewares.service.headers.customRequestHeaders.X-Forwarded-Proto=https"
- "traefik.http.routers.service.tls.certresolver=letsencrypt"
Run Code Online (Sandbox Code Playgroud)
如果我添加以下标签,基本身份验证正在工作,但它在整个网站上启用:
“traefik.http.middlewares.service-auth.basicauth.usersfile=/etc/traefik/auth”
“traefik.http.routers.service.middlewares=服务,服务身份验证”
我尝试像这样添加第二个路由器,但这似乎不起作用:
“traefik.http.routers.service-admin.rule=Host( domain.example.com) && PathPrefix( /somepath)”
“traefik.http.middlewares.service-auth.basicauth.usersfile=/etc/traefik/auth”
“traefik.http.routers.service-admin.middlewares=service-auth”
我缺少什么?
在 Kubernetes 环境中启动 Traefik 仪表板时遇到问题,以下是我的 traefik 部署设置:
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: ingress-traefik
name: traefik
labels:
app: traefik
spec:
replicas: 1
selector:
matchLabels:
app: traefik
template:
metadata:
labels:
app: traefik
spec:
serviceAccountName: traefik-ingress-controller
containers:
- name: traefik
image: traefik:v2.2
ports:
- name: web
containerPort: 80
- name: websecure
containerPort: 443
- name: admin
containerPort: 8080
args:
- --api
- --api.dashboard=true
- --providers.kubernetesingress
- --providers.kubernetescrd
- --entrypoints.web.Address=:80
- --entrypoints.websecure.Address=:443
- --ping.entryPoint=web
- --log.level=debug
Run Code Online (Sandbox Code Playgroud)
和仪表板 ingressRoute 设置:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute …Run Code Online (Sandbox Code Playgroud) 我的 Kubernetes 集群中有一个命名空间无法删除。当我运行时kubectl get ns traefik -o yaml,我得到以下信息:
apiVersion: v1
kind: Namespace
metadata:
annotations:
cattle.io/status: '{"Conditions":[{"Type":"ResourceQuotaInit","Status":"True","Message":"","LastUpdateTime":"2021-06-11T20:28:59Z"},{"Type":"InitialRolesPopulated","Status":"True","Message":"","LastUpdateTime":"2021-06-11T20:29:00Z"}]}'
field.cattle.io/projectId: c-5g2hz:p-bl9sf
lifecycle.cattle.io/create.namespace-auth: "true"
creationTimestamp: "2021-06-11T20:28:58Z"
deletionTimestamp: "2021-07-04T07:21:20Z"
labels:
field.cattle.io/projectId: p-bl9sf
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.: {}
f:field.cattle.io/projectId: {}
f:labels:
.: {}
f:field.cattle.io/projectId: {}
f:status:
f:phase: {}
manager: agent
operation: Update
time: "2021-06-11T20:28:58Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
f:cattle.io/status: {}
f:lifecycle.cattle.io/create.namespace-auth: {}
manager: rancher
operation: Update
time: "2021-06-11T20:28:58Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1: …Run Code Online (Sandbox Code Playgroud) traefik 的 2 天新手,需要帮助了解 traefik v2 中的 istm 是基本的第一个 docker 提供程序配置...
我尝试搜索文档,但只是不知道如何做我想要的事情。
我想要像这样的 docker 容器
并通过 traefik 通过 url 访问这些内容
http://app.mydomain.com/app1http://app.mydomain.com/app2http://app.mydomain.com/app3但是,应用程序本身不喜欢这些额外的路径,因此我想从访问路径中删除前缀,以便应用程序看不到它们。
如果我访问,http://app.mydomain.com/app2/foo我希望容器app2接收请求http://{container.ip.addr}}/foo
作为重现,我知道部分有效的配置在我的 traefik 中具有以下内容docker-compose.yml:
version: "3"
services:
traefik:
image: "traefik:v2.5.4"
command:
- --entrypoints.web.address=:80
- --providers.docker=true
- --api
- --api.insecure=true
- --api.dashboard=true
- --providers.file.directory=/etc/traefik/dynamic
- --providers.docker.defaultRule=Host(`app.mydomain.com`) && PathPrefix(`/{{ index .Labels "com.docker.compose.service" }}`)
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
app1:
image: containous/whoami:v1.3.0
app2:
image: containous/whoami:v1.3.0
app3: …Run Code Online (Sandbox Code Playgroud) 我已经使用 Traefik 一段时间来获取和续订 ACME 通配符证书。它使用 AWS Route 53 进行 DNS 挑战。证书最近过期了,由于错误而未能续订,我在任何地方都找不到解决方案。我能找到的 Traefik 的任何文档中似乎都不存在“Endpoint”。
route53: MissingEndpoint: 'Endpoint' configuration is required for this service
Run Code Online (Sandbox Code Playgroud)
FULL ERROR:
time="2022-05-09T20:23:49Z" level=error msg="Error renewing certificate from LE: {*.internal.<DOMAIN REMOVED> []}, error: one or more domains had a problem:\n[*.internal.<DOMAIN REMOVED>] [*.internal.<DOMAIN REMOVED>] acme: error presenting token: route53: MissingEndpoint: 'Endpoint' configuration is required for this service\n" providerName=dns-route53.acme ACME CA="https://acme-v02.api.letsencrypt.org/directory" here
Run Code Online (Sandbox Code Playgroud)
这是我的 docker-compose 文件的精简版本,用于定义 Traefik:
services:
traefik:
image: "traefik:latest"
environment:
- AWS_ACCESS_KEY_ID=${TRAEFIK_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${TRAEFIK_AWS_SECRET_ACCESS_KEY}
- AWS_REGION=${AWS_REGION}
- AWS_HOSTED_ZONE_ID=${ROUTE53_HOSTED_ZONE_ID}
command: …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的 FastAPI-Traefik-Docker 设置,您可以在这里找到: https: //github.com/mshajarrazip/fastapi-traefik-docker-cors
\n只需docker-compose up -d运行 FastAPI 和 traefik 服务即可。
此设置中未配置 TLS/SSL。
\n该应用程序有两个端点 GET“/hello”和 POST“/add”,它们除了返回 json 响应之外什么也不做:
\n在app/main.py
import logging\n\nfrom app import routes\nfrom fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\n\ndef create_application() -> FastAPI:\n app = FastAPI(title="\xe2\x9c\xa8 ML API \xe2\x9c\xa8")\n\n app.include_router(routes.hello.router)\n\n # add CORS\n # origins = ["*"]\n app.add_middleware(\n CORSMiddleware,\n allow_origins=["*"], # Allows all origins\n allow_credentials=True,\n allow_methods=["*"], # Allows all methods\n allow_headers=["*"], # Allows all headers\n )\n\n return app\n\n\napp = create_application()\nRun Code Online (Sandbox Code Playgroud)\n … 我想修改 URL 的端点,同时它从 traefik 到我的容器之一。我想要的是这个。
我的 URL 看起来像这样 - http://backend/asd 它应该指向我的具有不同端点的容器之一,如下所示 - http://asd/dfg
我尝试过的 -
asd:
image: asd
container_name: "asd"
labels:
- "traefik.backend=asd"
- "traefik.frontend.rule=Host:backend;PathPrefixStrip:/asd,PathPrefix:/dfg"
- "traefik.frontend.entryPoints=http"
- "traefik.enable=true"
- "traefik.port=80"
Run Code Online (Sandbox Code Playgroud)
但这没有用。欢迎任何建议。
问候,
阿舒托什
我正在尝试使用此Traefik用户指南:https://docs.traefik.io/user-guide/kubernetes/
用户指南和我的设置之间的主要区别在于指南假设我在Minikube上,而我正在尝试在Google Cloud Platform(GCP)上进行此设置.我是Kubernetes的新手,但我认为我对基本面有一个很好的处理.
无论如何,关于上面的用户指南中提供的基于角色的访问控制配置,我不断收到此错误:
服务器出错(禁止):创建"rbac.yml"时出错:cl usterroles.rbac.authorization.k8s.io"traefik-ingress-controller"被禁止:尝试授予额外权限:[PolicyRule {Resources:["services "],APIGroups:[""],动词:["get"]} PolicyRule {Resour ces:["services"],APIGroups:[""],动词:["list"]} PolicyRule {资源:["服务"],APIGroups:[""],动词:["观察"]} PolicyRule {资源:["端点"],APIGroups:[""],动词:["get"]} PolicyRule {资源:[ "端点"],APIGroups:[""],动词:["list"]} PolicyRule {资源:["端点"],APIGroups:[""],动词:["watch"]} PolicyRule {资源:[ "秘密"],APIGroups:[""],动词:["get"]} PolicyRule {资源:["秘密"],APIGroups:[""],动词:["list"]} PolicyRule {资源:[ "秘密"],APIGroups:[""],动词:["观看"]} PolicyRule {资源:["ingresses"],APIGroups:["extensions"],动词:["get"]} PolicyRule {资源: ["ingresses"],APIGroups:["extensions"],动词:["list"]} PolicyRule {资源:["ingresses"],APIGroups:["扩展名 s"],动词:["watch"]}] user=&{evan@sherwood.io [system:authenti cated] map [authenticator:[GKE]]} ownerrules = [PolicyRule {Resources:["selfsubjectaccessreviews"], APIGroups:["authorization.k8s.io"],动词:["create"]} PolicyRule {资源:["selfsubjectrulesreviews"],APIGroups:["authorization.k8s.io"],动词:["create"]} PolicyRule {NonResourceURLs:["/ api""/ api/""/ apis""/ apis / ""/ healthz""/ swagger-2.0.0.pb-v1""/ swagger.json""/ swaggerapi""/swaggerapi/*""/ version"],动词:["get"]}] ruleResolutionErrors = []
我觉得我正在遇到特权升级预防和引导,但我不确定我需要改变/做什么才能超越这个.
google-cloud-platform kubernetes google-kubernetes-engine traefik
我试图弄清楚如何为开发和以后的部署设置简单的堆栈。我想利用Docker作为面向公众的反向代理在容器中提供Traefik,然后根据需要与Nginx容器进行接口,该Nginx容器仅用于提供静态前端文件(HTML,CSS,JS)和后端PHP容器运行Laravel(我有意将这个项目的前端和API分离)。
我正在尽力从那里学习所有视频和书面教程,但是事情变得非常复杂(至少对于我刚起步的大脑而言),而且有点让人不知所措。我有一个为期一周的截止日期才能完成此项目,并且我强烈考虑暂时放弃Docker,因为我担心我会花整整时间试图弄乱配置而不是实际编码!
首先,我有一个简单的docker-compose,其以下配置至少已正确运行:
version: '3'
services:
reverse-proxy:
image: traefik
command: --api --docker # Enables Web UI and tells Traefik to listen to Docker.
ports:
- "80:80" # HTTP Port
- "8080:8080" # Web UI
volumes:
- /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events.
Run Code Online (Sandbox Code Playgroud)
现在,我需要弄清楚如何有效地连接Nginx和PHP / Laravel。
我正在使用 Whoami 进行测试并在生成证书时遇到问题。
acme.json 文件中没有生成任何证书,并且站点使用的是 Traefik 的默认证书,导航器认为该证书无效。
这是错误:
traefik | time="2019-10-14T21:16:15Z" level=error msg="Unable to obtain ACME certificate for domains \"inner-whoami.mysite.com\": unable to generate a certificate for the domains [inner-whoami.mysite.com]: acme: Error -> One or more domains had a problem:\n[inner-whoami.mysite.com] acme: error: 403 :: urn:ietf:params:acme:error:unauthorized :: Invalid response from https://inner-whoami.mysite.com/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxx [51.75.207.100]: \"Hostname: xxxxxxxxxx\\nIP: 127.0.0.1\\nIP: 172.18.0.2\\nRemoteAddr: 172.18.0.3:55692\\nGET /.well-known/acme-challenge/xxxxxxxxxx\", url: \n" rule="Host(`inner-whoami.mysite.com`)" routerName=inner-whoami-secured providerName=myhttpchallenge.acme
traefik | time="2019-10-14T21:16:17Z" level=debug msg="legolog: [INFO] Unable to deactivate the authorization: https://acme-v02.api.letsencrypt.org/acme/authz-v3/xxxxxxxxxx"
Run Code Online (Sandbox Code Playgroud)
这是 docker-compose.yml 文件。一切都在里面。如您所见,这是一个准备进一步部署的测试。不是实际的生产文件。我需要在能够使用 Traefik 服务器范围之前解决这个问题......
version: "3.3" …Run Code Online (Sandbox Code Playgroud) 我试过这个:
version: "3.3"
services:
traefik:
image: "traefik:latest"
command:
- --api.insecure=true
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --api=true
- --api.dashboard=true
- --entrypoints.web.address=:80
- --log.filePath=/home/docker/traefik.log
- --log.level=DEBUG
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: "containous/whoami"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.traefik.kb`) && Path(`/who`)"
- "traefik.http.routers.whoami.entrypoints=web"
- "traefik.http.routers.whoami.service=whoami"
- "traefik.http.services.whoami.loadbalancer.server.port=80"
nginx:
image: "nginx:alpine"
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx.rule=Host(`nginx.traefik.kb`) && Path(`/ng`)"
- "traefik.http.routers.nginx.entrypoints=web"
- "traefik.http.routers.nginx.service=nginx"
- "traefik.http.services.nginx.loadbalancer.server.port=80"
nginx2:
image: "nginx:alpine"
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx2.rule=Host(`nginx2.traefik.kb`)"
- "traefik.http.routers.nginx2.entrypoints=web"
- "traefik.http.routers.nginx2.service=nginx2"
- "traefik.http.services.nginx2.loadbalancer.server.port=80"
Run Code Online (Sandbox Code Playgroud)
我在 docker …
我已经在 grpc.mydomain.com 上使用 LetsEncrypt 在 traefik 上启动并运行了一项服务。但是,由于 CORS 的一些问题,traefik 不支持路由 grpc-web 请求(https://github.com/containous/traefik/issues/4210)。Envoy 似乎是 traefik 的替代品,它与 grpc-web 一起使用,但我不想重新配置所有内容。
如果我将 envoy 放在 envoy.mydomain.com 上,那么它实际上会首先访问 traefik,并且 traefik 无法将 grpc-web 请求路由到 envoy。所以这是行不通的。
如果我将 envoy 置于 traefik (mydomain.com:9091) 之外,则 envoy 不具备 traefik 所具备的 TLS 支持。
我需要将所有内容都切换为 Envoy 吗?还有我没有考虑过的替代方案吗?欢迎任何指导:)
当前 Traefik 设置:
traefik:
image: traefik:v2.0.0
container_name: traefik
command:
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --entrypoints.grpc.address=:8090
- --providers.docker
- --api
- --serversTransport.rootCAs=/certs/grpc.cert
# Lets Encrypt Resolvers
- --certificatesresolvers.leresolver.acme.email=${EMAIL}
- --certificatesresolvers.leresolver.acme.storage=/etc/acme/cert.json
- --certificatesresolvers.leresolver.acme.tlschallenge=${TLS_CHALLENGE}
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- …Run Code Online (Sandbox Code Playgroud) traefik ×13
docker ×6
kubernetes ×3
nginx ×2
acme ×1
cors ×1
docker-swarm ×1
envoyproxy ×1
fastapi ×1
grpc-web ×1
https ×1
laravel ×1
lets-encrypt ×1
postgresql ×1
preflight ×1