在Docker Swarm中,如何通过仅通过traefik公开端口8000的https连接到服务?

时间:2019-03-30 19:19:40

标签: docker reverse-proxy docker-swarm traefik mattermost

我正在尝试将Mattermost添加到我现有的Gitlab Docker Swarm中。我们使用traefik作为反向代理,并且当前已将其设置为将端口80上的所有http流量重定向到https,这将启动gitlab实例。

我们在堆栈中还有其他服务,例如prometheus和grafana,它们具有traefik后端并通过端口8080上的http进行访问。

Mattermost产品映像仅公开端口8000。我可以通过端口8000上的http很好地将其显示在群集中:

mattermost:
    image: mattermost/mattermost-prod-app:5.9.0
    networks:
      - frontend
      - database
      - traefik
    volumes:
      - mm_config:/mattermost/config
      - mm_data:/mattermost/data
      - mm_logs:/mattermost/logs
      - mm_plugins:/mattermost/plugins
      - /etc/localtime:/etc/localtime:ro
    configs:
      - source: mm_config_json
        target: /mattermost/config/config.json
        mode: 0755
    deploy:
      mode: replicated
      replicas: 1
      labels:
        traefik.port: 8000
        traefik.backend.loadbalancer.swarm: "true"
        traefik.docker.network: gitlab_frontend
        traefik.frontend.rule: 'HostRegexp:{arbitrary:mattermost\\..*}'
        traefik.frontend.passHostHeader: "true"
        traefik.frontend.entryPoints: http
      restart_policy:
        condition: on-failure

在我最重要的config.json文件中:

"SiteURL": "http://{MATTERMOST-URL}:8000",
        "WebsocketURL": "",
        "LicenseFileLocation": "",
        "ListenAddress": "0.0.0.0:8000"

如果我转到http:// {MATTERMOST-URL}:8000,它会很好。问题在于,我们正在尝试使用在https中运行的gitlab服务进行身份验证,并且由于混合协议,令牌存在问题。因此,我希望Mattermost在https中运行以缓解该问题。

我有一个用于最重要URL的签名证书和密钥,但是我似乎无法以这样的方式配置traefik和至关重要:我可以建立一个通往最重要而不是gitlab的https连接。

我尝试在traefik.toml文件中创建一个特殊的entryPoint:(httpsMM),然后在我最重要的服务上使用该终结点,但这不起作用。

defaultEntryPoints = ["http", "https"]
[entryPoints]
  [entryPoints.http]
  address = "0.0.0.0:80"
  [entryPoints.https]
  address = "0.0.0.0:443"
    [entryPoints.https.tls]
  [entryPoints.httpsMM]
  address = "0.0.0.0:8443"
    [entryPoints.httpsMM.tls]
      [[entryPoints.httpsMM.tls.certificates]]
      CertFile = "/etc/ssl/mattermost-dev.crt"
      KeyFile = "/etc/ssl/mattermost-dev.key"

由于Mattermost容器仅公开端口8000,因此我假设我必须保留该配置以侦听端口8000,以便traefik后端位于端口8000上。

因此,基本上,我希望能够在Swarm中拥有不同的服务,从而能够通过https路由不同的路由,而不是将所有https流量都传递给一项服务。

这是我在集群中的traefik服务:

traefik:
    image: traefik:1.7.9-alpine
    #1.3.1
    command:
      - --docker
      - --docker.swarmmode
      - --docker.watch
      - --web
      - --web.metrics.prometheus
      - --docker.domain={DOMAIN}
      - --logLevel=DEBUG
    ports:
      - 8080:80
      - 8443:8000  *not sure about this one- trying different options here
      - 9090:8080
    configs:
      - source: traefik_toml
        target: /etc/traefik/traefik.toml
        mode: 0644
      - source: mm_ssl_cert
        target: /etc/ssl/mattermost-dev.crt
        mode: 0444
      - source: mm_ssl_key
        target: /etc/ssl/mattermost-dev.key
        mode: 0444
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - traefik
      - frontend
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: any
      placement:
        constraints:
          - node.role == manager

这可能吗?如果是这样,将不胜枚举。 谢谢。

0 个答案:

没有答案