GithubHelp home page GithubHelp logo

cf-domain-broker's People

Contributors

adborden avatar afeld avatar bengerman13 avatar cmc333333 avatar cnelson avatar dcarley avatar dlapiduz avatar henrytk avatar jcscottiii avatar jmcarp avatar jontours avatar jonty avatar linuxbozo avatar mogul avatar mtekel avatar paroxp avatar rogeruiz avatar sharms avatar siennathesane avatar soutenniza avatar tammersaleh avatar timothy-spencer avatar wjwoodson avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

cf-domain-broker's Issues

Reconsider need for idempotent certificate registrations

Currently, we take great pains to ensure that we can restart the certificate registration process without impacting the user (ie: cert registration is idempotent):

  1. We re-implement the Obtain() entry point from the lego library.
  2. We checkpoint the instance state (read, check, and write the instance info to DB) aggressively throughout.
  3. We implement the virtual actor pattern across all managers to enable complete async behavior.

This adds a lot of complexity, which translates to difficulty in maintenance and increased time to debug issues. Since issues in this broker's operation can result in real downtime for our end users, I'd like to explore ways we can reduce this complexity, and hopefully the time it would take to fix any such issues.

To that end: What would be the expected impact on the end user if we didn't implement idempotent certificate registration? Here's what I'm imagining, but I'm hoping this starts a discussion around the idea in the comments.

Scenario 1:

Obtain() is restarted before the user sees the DNS instructions.

  1. ๐Ÿ‘ฉ User creates instance
  2. Provisioning begins
  3. ACME validation token (A) is generated
  4. ๐Ÿ’ฅ Broker is restarted
  5. Provisioning restarts
  6. New ACME validation token (B) is generated
  7. ๐Ÿ‘ฉ User gets service status and sees instructions to update DNS with TXT record including B
  8. ๐Ÿ‘ฉ User updates DNS
  9. Broker verifies DNS
  10. ACME provisioning proceeds as normal

I believe this is pretty straight forward -- the user never notices. I also wouldn't bet on this being a more likely path. The bigger issue is...

Scenario 2:

Obtain() is restarted after the user sees the DNS instructions.

  1. ๐Ÿ‘ฉ User creates instance
  2. Provisioning begins
  3. ACME validation token (A) is generated
  4. ๐Ÿ‘ฉ User gets service status and sees instructions to update DNS with TXT record including B
  5. ๐Ÿ’ฅ Broker is restarted
  6. Provisioning restarts
  7. New ACME validation token (B) is generated
  8. ๐Ÿ‘ฉ User updates DNS
  9. Broker fails to verify DNS ๐Ÿ™…
  10. ACME provisioning stalls

Either one of two paths would then happen:

  1. User gets status on instance, and we can report that there is a TXT record, but that it doesn't match the expected token (B). We can explain that this might be due to a restart on our end.
  2. User doesn't bother checking the instance status, 24hrs pass, and we kill the instance entirely.

This isn't great by any means, but it's also not catastrophic.

Thoughts?

Are there other scenarios I'm not considering?

Are there other impacts in the above scenarios?

What's even the likelihood we'll hit either of these? (maybe we'll be deploying somewhat often, but we won't be provisioning new certs that frequently)

How much could we mitigate the impact on the user via documentation, clear error messages and our own support time?

How savvy are the users who'll be provisioning instances of this service? Is it primarily Federalist? If so, can we reach out to educate them of this issue beforehand?

Thanks for reading all of the above, and thanks in advance for any thoughts and ideas you can contribute below. I'll update the above with any new information from the comments.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.