InfluxDB 2.0 - TLS 암호화를 Traefik으로 신속하게 활성화

자동 TLS 인증서 관리를 통해 XDB 스택을 신속하게 시작합니다.

용례


따라서 Docker나 Kubernetes와 함께 일련의 사물인터넷/금융 또는 암호화폐 서비스를 실행하고 있으며 생산 과정에서 XDB 2.0 계기판을 사용하기로 결정했습니다.귀신이 곡할 노릇이다. flux 검색어에는 extra fancy API까지 사용할 수 있다.

(누가 그라파나를 필요로 합니까?)
분명히 웹 응용 프로그램과 서버 (마이크로 서비스) 간의 통신을 보호해야 합니다.이것이 바로 TLS 암호화로 만들어진 것이다. 어디서나 볼 수 있다는 것을 너는 알고 있다. https://

뭘 드시겠어요?

  • Docker 컨테이너에서 백엔드를 실행 중입니다.Docker, Docker Swarm 또는 Kubernetes 또는 YAML compose 파일이나 비슷한 파일로 정의된 Docker 컨테이너를 실행하는 다른 공급업체입니다.
  • 에이전트로서 실행 중이거나 실행 예정Traefik입니다.
  • DNS 레코드를 관리할 수 있는 도메인 이름이 있습니다.
  • 옵션:
  • DNS 서비스에서 와일드카드 TLS 인증서를 생성할 수 있습니다.
  • 사용자는 DNS-01 ACME Challenge DNS 서비스 API에 액세스할 수 있습니다.
  • 필요한 인증서 지시하다


  • 더 간단한 을 선택한 경우 필요한 모든 DNS 레코드(예: A 또는 CNAME 레코드 작성)를 와일드카드 하위 도메인 이름으로 미리 작성해야 합니다.그럼에도 불구하고, 만약 하위 영역의 어댑터 인증서가 필요하다면, DNS-01 ACME를 사용해서 도전해야 합니다.

    CAUTION: There are pros and cons for using each type of challenge. Use industry best practices and your own judgement when deciding which method to use for your project.


    다음은 HTTP-01 질의의 일반적인 DNS 레코드 테이블 예입니다.
    타입
    호스트 이름
    가치관
    TTL(초)
    A
    예.일반 도메인 이름 형식
    바로 203.0.113.123으로 가세요.
    3600
    A
    트라피크.예.일반 도메인 이름 형식
    바로 203.0.113.123으로 가세요.
    3600
    CNAME
    XDB.예.일반 도메인 이름 형식
    예제의 별명입니다.일반 도메인 이름 형식
    43200
    우리의 주요 도메인 이름이 바로 하나의 예이다.com과 저희가 실행 중인 두 서비스는 하위 도메인 이름traefik을 통해 공개됩니다.*및 XDB.*하위 영역을 통해 더 많은 서비스를 방문하고 싶다면, 여기에 추가할 때가 되었다.TTL 설정은 이 자습서와 무관하므로 언제든지HTTP-01 ACME Challenge DNS에 액세스하십시오.
    DNS-01 도전을 시도할 때 다음과 같은 테이블이 표시됩니다.
    타입
    호스트 이름
    가치관
    TTL(초)
    A
    *. 예.일반 도메인 이름 형식
    바로 203.0.113.123으로 가세요.
    3600
    A
    예.일반 도메인 이름 형식
    바로 203.0.113.123으로 가세요.
    3600

  • 우리는 인증서를 귀속 마운트 acme.json 에 저장할 것입니다.따라서 Traefik이 이 파일에 액세스할 수 있도록 적절한 권한을 미리 설정해야 합니다.
    touch acme.json; chmod 600 acme.json
    

  • (재)다음labels을 적용하여 XDB 컨테이너를 정의합니다.
    Docker의 경우(Compose 사용):
      ...
      my-influxdb:
        image: influxdb:2.0
        labels:
          # traefik router settings
          traefik.http.routers.my-influxdb.rule: "Host(`influxdb.example.com`)"
          traefik.http.routers.my-influxdb.tls: "true"
          traefik.http.routers.my-influxdb.tls.certresolver: "myresolver"
          traefik.http.routers.my-influxdb.entrypoints: "websecure"
    
    Docker Swarm의 경우:
      ...
      my-influxdb:
        image: influxdb:2.0
        deploy:
          labels:
            # traefik router settings
            traefik.http.routers.my-influxdb.rule: "Host(`influxdb.example.com`)"
            traefik.http.routers.my-influxdb.tls: "true"
            traefik.http.routers.my-influxdb.tls.certresolver: "myresolver"
            traefik.http.routers.my-influxdb.entrypoints: "websecure"
    
            # traefik service settings
            traefik.http.services.my-influxdb.loadbalancer.server.port: "8086"
    
    이름my-influxdb, myresolverwebsecure는 Traefik 구성의 유일한 식별자로router(서비스), certificate resolver, entrypoint(포트 443)를 각각 나타낸다.여기서, 우리는 현재 공유기 my-influxdb 를 정의했고, 다음 두 개는 다음 단계에서 정의할 것이다.모든 데이터가 Traefik에서 처리되기 때문에 compose 파일에 서비스 포트를 공개하지 않습니다.

    Note: for Swarm, Traefik requires you explicitly define at least one port the service is running on, even it if has no listening ports. (see Port Detection - Traefik Docs)


    이 새 설정을 docker compose up 사용하거나 docker stack deploy -c docker-compose.yml <stack_name> 배치하는 것을 잊지 마십시오.

  • 이제 트레이픽 컨테이너를 compose 파일에 추가합니다.
    다음은 편곡자와 ACME 도전 장르의 조합에 따라 네 가지 다른 방법이다.
    모든 경우에 Staging Let's Encrypt 서버를 사용합니다. dive deeper 이후 더 빠른 오류를 방지하기 위해 새로운 인증서를 생성하는 데 도움이 됩니다.모든 것이 정상적이면 정의 줄certificateresolvers.myresolver.acme.caserver을 삭제하고 Traefik 용기를 재배치하면 됩니다.
    또한 DNS-01 질의에 사용되는 DNS 서버는 digitalocean입니다. 이것은 제가 정의해야 합니다DO_AUTH_TOKEN.DNS 공급업체에 따라rate limit is much higher가 필요합니다.

  • Docker(작성)+HTTP-01 도전:
    traefik:
      image: "traefik:v2.0.0"
      command:
        - --entrypoints.web.address=:80
        - --entrypoints.websecure.address=:443
        - --providers.docker
        - --api
        - --certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
        - [email protected]
        - --certificatesresolvers.myresolver.acme.storage=acme.json
      ports:
        - "80:80"
        - "443:443"
      volumes:
        - "/var/run/docker.sock:/var/run/docker.sock:ro"
        - "./acme.json:/acme.json"
      labels:
        # Traefik Dashboard
        traefik.http.routers.traefik.rule: "Host(`traefik.sample.com`)"
        traefik.http.routers.traefik.service: "api@internal"
        traefik.http.routers.traefik.tls.certresolver: "myresolver"
        traefik.http.routers.traefik.entrypoints: "websecure"
    
        # Redirect to HTTPS
        traefik.http.middlewares.redirect-to-https.redirectscheme.scheme: "https"
        traefik.http.routers.http-catchall.rule: "hostregexp(`{host:.+}`)"
        traefik.http.routers.http-catchall.entrypoints: "web"
        traefik.http.routers.http-catchall.middlewares: "redirect-to-https"
    

  • Docker(작성)+DNS-01 도전:
    traefik:
      image: "traefik:v2.0.0"
      environment:
        DO_AUTH_TOKEN: "0f923jf..."
      command:
        - --entrypoints.web.address=:80
        - --entrypoints.websecure.address=:443
        - --providers.docker
        - --api
        - --certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
        - --certificatesresolvers.myresolver.acme.dnschallenge.provider=digitalocean
        - --certificatesresolvers.myresolver.acme.dnschallenge.delaybeforecheck=0
        - [email protected]
        - --certificatesresolvers.myresolver.acme.storage=acme.json
      ports:
        - "80:80"
        - "443:443"
      volumes:
        - "/var/run/docker.sock:/var/run/docker.sock:ro"
        - "./acme.json:/acme.json"
      labels:
        # Traefik Dashboard
        traefik.http.routers.traefik.rule: "Host(`traefik.sample.com`)"
        traefik.http.routers.traefik.service: "api@internal"
        traefik.http.routers.traefik.tls.certresolver: "myresolver"
        traefik.http.routers.traefik.entrypoints: "websecure"
    
        # Redirect to HTTPS
        traefik.http.middlewares.redirect-to-https.redirectscheme.scheme: "https"
        traefik.http.routers.http-catchall.rule: "hostregexp(`{host:.+}`)"
        traefik.http.routers.http-catchall.entrypoints: "web"
        traefik.http.routers.http-catchall.middlewares: "redirect-to-https"
    

  • Docker Swarm+HTTP-01 도전:
    traefik:
      image: "traefik:v2.0.0"
      command:
        - --entrypoints.web.address=:80
        - --entrypoints.websecure.address=:443
        - --providers.docker
        - --api
        - --certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
        - [email protected]
        - --certificatesresolvers.myresolver.acme.storage=acme.json
      ports:
        - "80:80"
        - "443:443"
      volumes:
        - "/var/run/docker.sock:/var/run/docker.sock:ro"
        - "./acme.json:/acme.json"
      deploy:
        labels:
          # Traefik Dashboard
          traefik.http.routers.traefik.rule: "Host(`traefik.sample.com`)"
          traefik.http.routers.traefik.service: "api@internal"
          traefik.http.routers.traefik.tls.certresolver: "myresolver"
          traefik.http.routers.traefik.entrypoints: "websecure"
    
          # Redirect to HTTPS
          traefik.http.middlewares.redirect-to-https.redirectscheme.scheme: "https"
          traefik.http.routers.http-catchall.rule: "hostregexp(`{host:.+}`)"
          traefik.http.routers.http-catchall.entrypoints: "web"
          traefik.http.routers.http-catchall.middlewares: "redirect-to-https"
    
          # service definitions
          traefik.http.services.traefik.loadbalancer.server.port: "80"
          traefik.http.services.traefik.loadbalancer.server.port: "443"
    

  • Docker Swarm+DNS-01에 대한 과제:
    traefik:
      image: "traefik:v2.0.0"
      environment:
        DO_AUTH_TOKEN: "0f923jf..."
      command:
        - --entrypoints.web.address=:80
        - --entrypoints.websecure.address=:443
        - --providers.docker
        - --api
        - --certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
        - --certificatesresolvers.myresolver.acme.dnschallenge.provider=digitalocean
        - --certificatesresolvers.myresolver.acme.dnschallenge.delaybeforecheck=0
        - [email protected]
        - --certificatesresolvers.myresolver.acme.storage=acme.json
      ports:
        - "80:80"
        - "443:443"
      volumes:
        - "/var/run/docker.sock:/var/run/docker.sock:ro"
        - "./acme.json:/acme.json"
      deploy:
        labels:
          # Traefik Dashboard
          traefik.http.routers.traefik.rule: "Host(`traefik.sample.com`)"
          traefik.http.routers.traefik.service: "api@internal"
          traefik.http.routers.traefik.tls.certresolver: "myresolver"
          traefik.http.routers.traefik.entrypoints: "websecure"
    
          # Redirect to HTTPS
          traefik.http.middlewares.redirect-to-https.redirectscheme.scheme: "https"
          traefik.http.routers.http-catchall.rule: "hostregexp(`{host:.+}`)"
          traefik.http.routers.http-catchall.entrypoints: "web"
          traefik.http.routers.http-catchall.middlewares: "redirect-to-https"
    
          # service definitions
          traefik.http.services.traefik.loadbalancer.server.port: "80"
          traefik.http.services.traefik.loadbalancer.server.port: "443"
    
  • 마찬가지로, 이 새로운 서비스를 배치하는 것을 잊지 마라. 몇 초 후에 너는 운행을 시작할 수 있다.

    다른 자격 증명 정의 생산으로 전환하다


    4단계에서 설명한 대로 Staging Let's Encrypt 서버를 사용하여 인증서를 생성합니다.따라서 브라우저가 인증서를 신뢰하지 않습니다.

    간단한 해결 방법: 인증서가 잘못되면 모든 작업이 예상대로 진행되며, 정의된 줄 certificateresolvers.myresolver.acme.caserver 을 삭제하고 Traefik 용기를 재배치하기만 하면 됩니다.

    아직도 혼란스러워요?

  • Why use HTTPS?
  • 좋은 웹페이지 즐겨찾기