рдЖрдЗрдП, Kubernetes рдореЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░-рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд╕рд╛рде SSL рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдРрдб-рдСрди рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ-рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЗрдирдЧреНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд▓реЗрдЯреНрд╕ рдПрдирдХреНрд░рд┐рдкреНрдЯ (рдФрд░ рди рдХреЗрд╡рд▓) рд╕реЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рдЖрджреЗрд╢ рдФрд░ рдирд╡реАрдиреАрдХрд░рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рд░ рд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ред

рдереЛрдбрд╝рд╛ рд╢реИрдХреНрд╖рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо


рдкрд┐рдЫрд▓реА рд╢рддрд╛рдмреНрджреА рдХреЗ рд╢реБрд░реБрдЖрддреА 90 рдХреЗ рджрд╢рдХ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдиреЗ рд╣рдорд╛рд░реЗ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдЬреАрд╡рди рдореЗрдВ рдЗрддрдиреА рдордЬрдмреВрддреА рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рджрд┐рди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рдпрд╣ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕реВрдЪрдирд╛рдУрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╕рдордп рдПрдХ рдиреНрдпреВрдирддрдо рд╕реНрддрд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рднреА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред HTTPS ("S" - рд╕реБрд░рдХреНрд╖рд┐рдд) рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ: рдПрд╕рдПрд╕рдПрд▓ / рдЯреАрдПрд▓рдПрд╕ рдореЗрдВ рд╕рдВрдЪрд░рд┐рдд рдбреЗрдЯрд╛ рдХреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдиреЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрд╡рд░реЛрдзрди рд╕реЗ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдЦреБрдж рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЙрджреНрдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Google рдиреЗ 2014 рдХрд╛ рдкрд╛рд▓рди тАЛтАЛрдХрд┐рдпрд╛ рд╣реИ"HTTPS рд╣рд░ рдЬрдЧрд╣" рд╕реНрдерд┐рддрд┐ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИред рдпрд╣ "рдкреНрд░рдЪрд╛рд░" рдЖрдо рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдпрд╛ рддреЛ рдмрд╛рдИрдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдиреЗ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд┐рдЬрд╝рд┐рдЯ рдХреА рдЧрдИ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдПрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рд╢реБрджреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреА рд╣реИред





рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреА рд▓рд╛рдЧрдд рджрд╕рд┐рдпреЛрдВ рдбреЙрд▓рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ рдЦрд░реАрджрдирд╛ рдЙрдЪрд┐рдд рдФрд░ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, 2015 рдХреЗ рдЕрдВрдд рд╕реЗ, рд▓реЗрдЯреНрд╕ рдПрдирдХреНрд░рд┐рдкреНрдЯ (LE) рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдореБрдлреНрдд рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдпрд╣ рдЧреИрд░-рд▓рд╛рднрдХрд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЛрдЬрд╝рд┐рд▓рд╛ рдХреЗ рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдереА рддрд╛рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдбреЛрдореЗрди-рдорд╛рдиреНрдп рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ(рдмрд╛рдЬрд╛рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рд╕рд░рд▓) 90 рджрд┐рдиреЛрдВ рдХреА рд╡реИрдзрддрд╛ рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде, рдФрд░ рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдм рдХрдИ рдЙрдкрдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рддрдерд╛рдХрдерд┐рдд рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдЗрдЯ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓реЗрдЯреНрд╕ рдПрдирдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рдмрдВрдзрди рдкрд░реНрдпрд╛рд╡рд░рдг (ACME) рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдбреЛрдореЗрди рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреА рдкреБрд╖реНрдЯрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ HTTP рдХреЛрдб (рдЬрд┐рд╕реЗ HTTP-01 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ) рдпрд╛ DNS рд░рд┐рдХреЙрд░реНрдбреНрд╕ (DNS-01) рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рдорд╛рдгрди рдкреНрд░рдмрдВрдзрдХ


рдкреНрд░рдорд╛рдгрдкрддреНрд░-рдкреНрд░рдмрдВрдзрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬреЛ рд╕реАрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдкреНрд░рдорд╛рдгрди рдкреНрд░рд╛рдзрд┐рдХрд░рдг) рдХреЗ рд▓рд┐рдП CustomResourceDefinitions (рдЗрд╕рд▓рд┐рдП K8s - v1.12 рдХреЗ рдиреНрдпреВрдирддрдо рд╕рдорд░реНрдерд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╕реАрдорд╛ ) рдФрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдЖрджреЗрд╢ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ CRD рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рддреБрдЪреНрдЫ рд╣реИ рдФрд░ рдПрдХ YAML рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ :

kubectl create ns cert-manager
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v0.13.0/cert-manager.yaml

( рдирд╣реАрдВ рд╣реИ ред рдпрд╣ рднреА рдкрддрд╡рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛)

рдЖрджреЗрд╢ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЕрдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ (рд╕реАрдП) рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: Issuerрдпрд╛ ClusterIssuer, - рд╕реАрдПрд╕рдЖрд░ (рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз) рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрди рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдЧреБрдВрдЬрд╛рдЗрд╢ рдореЗрдВ рд╣реИ:

  • Issuer рдПрдХ рд╣реА рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рднреАрддрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ,
  • ClusterIssuer рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдХреНрд▓рд╕реНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред

рдкреНрд░рдорд╛рдгрд┐рдд-рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд╕рд╛рде рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ


рдирдВрдмрд░ 1ред рд╕реНрд╡ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдг рдкрддреНрд░


рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рдПрдХ рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХрд╛ рдЖрджреЗрд╢ рджреЗрдирд╛ред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдлреА рдЖрдо рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╛ рдмрд╛рд╣рд░реА рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреЛ рдПрд╕рдПрд╕рдПрд▓ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рд╕рдВрд╕рд╛рдзрди IssuerрдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
  name: selfsigned
spec:
  selfSigned: {}

рдФрд░ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрд╕рд╛рдзрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ Certificate, рдЬрд╣рд╛рдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдП ( issuerRefрдиреАрдЪреЗ рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВ) рдФрд░ рдЬрд╣рд╛рдВ рдирд┐рдЬреА рдХреБрдВрдЬреА (рдлрд╝реАрд▓реНрдб secretName) рд╕реНрдерд┐рдд рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, Ingress рдХреЛ рдЗрд╕ рдХреБрдВрдЬреА рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ (рдЕрдиреБрднрд╛рдЧ tlsc рджреЗрдЦреЗрдВ spec):

---
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: selfsigned-crt
spec:
  secretName: tls-secret
  issuerRef:
    kind: Issuer
    name: selfsigned
  commonName: "yet-another.website"
  dnsNames:
  - "yet-another.website"
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: app
spec:
  tls:
  - hosts:
    - "yet-another.website"
    secretName: tls-secret
  rules:
  - host: "yet-another.website"
    http:
      paths:
      - path: /
        backend:
          serviceName: app
          servicePort: 8080

рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдХреБрдЫ рд╕реЗрдХрдВрдб рдмрд╛рдж, рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдХрдорд╛рдВрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

kubectl -n app describe  certificate selfsigned-crt
...
  Normal  GeneratedKey  5s    cert-manager  Generated a new private key
  Normal  Requested     5s    cert-manager  Created new CertificateRequest resource "selfsigned-crt-4198958557"
  Normal  Issued        5s    cert-manager  Certificate issued successfully

рдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рдЧреБрдкреНрдд рд╕рдВрд╕рд╛рдзрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдирд┐рдЬреА рдХреБрдВрдЬреА tls.key,
  • рд░реВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ ca.crt,
  • рд╣рдорд╛рд░реЗ рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдг рдкрддреНрд░ tls.crtред

рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ openssl, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

kubectl -n app get secret tls-secret -ojson | jq -r '.data."tls.crt"' | base64 -d | openssl x509 -dates -noout -issuer
notBefore=Feb 10 21:01:59 2020 GMT
notAfter=May 10 21:01:59 2020 GMT
issuer=O = cert-manager, CN = yet-another.website

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдкрд░Issuer рд╕рдВрдмрдВрдзрд┐рдд рдЧреНрд░рд╛рд╣рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдХрд╛рд░рдг рд╕рд░рд▓ рд╣реИ: рдЗрд╕рдореЗрдВ CA рдирд╣реАрдВ рд╣реИ ( рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдиреЛрдЯ рджреЗрдЦреЗрдВ ) ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ CertificateрдЧреБрдкреНрдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрде рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдирд┐рд╣рд┐рдд рд╣реИ ca.crtред рдпрд╣ рдПрдХ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╕реАрдП рд╕рдВрдЧрдарди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреНрдп рд╕рд░реНрд╡рд░ рд╕реЗрд╡рд╛рдУрдВ / рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдирдВрдмрд░ 2ред рдЪрд▓реЛ HTTP рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ


LE рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЛрдореЗрди рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреА рдкреБрд╖реНрдЯрд┐ рдЙрдкрд▓рдмреНрдз рд╣реИ : HTTP-01 рдФрд░ DNS-01ред

рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг (HTTP-01) рд╣реИ рдПрдХ рдЕрд▓рдЧ рддреИрдирд╛рддреА, рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреА рд╕реА рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП <your_domain > /ред рдкреНрд░рд╕рд┐рджреНрдз / рдПрдХреНрдореЗ-рдЪреБрдиреМрддреА / <рдЯреЛрдХрди> рдХреБрдЫ рдбреЗрдЯрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╡рд┐рдзрд┐ рдкреЛрд░реНрдЯ 80 рдкрд░ рдмрд╛рд╣рд░ рд╕реЗ рдЖрдИрдПрдирдЬреА рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдФрд░ рдбреЛрдореЗрди рдХреЗ DNS рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рдкрддреЗ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИред

рдЬрд╛рд░реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ (DNS-01) рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЖрддрд╛ рд╣реИрдбреЛрдореЗрди рд░рд┐рдХреЙрд░реНрдб рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рдиреЗ рд╡рд╛рд▓реЗ DNS рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд╣реЛрдиреЗ рд╕реЗред рдЬрд╛рд░реАрдХрд░реНрддрд╛, рд╕рдВрдХреЗрддрд┐рдд рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдбреЛрдореЗрди рдкрд░ TXT рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ ACME рд╕рд░реНрд╡рд░ рддрдм рдкреБрд╖реНрдЯрд┐ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд DNS рдкреНрд░рджрд╛рддрд╛рдУрдВ рдореЗрдВ CloudFlare, AWS Route53, Google CloudDNS рдФрд░ рдЕрдиреНрдп рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЗрд╕рдХрд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ( acme-dns ) рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред

рдиреЛрдЯ : рдорд╛рди рд▓реЗрдВ рдХрд┐ Encrypt рдХреЗ рдкрд╛рд╕ ACME рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдХрд╛рдлреА рд╕рдЦреНрдд рд╕реАрдорд╛рдПрдБ рд╣реИрдВред рд▓рдВрдмреЗ рдкреНрд░рддрд┐рдмрдВрдз рдореЗрдВ рдирд╣реАрдВ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓реЗрдЯреЗрдиреНрд╕рдХреНрд░рд┐рдкреНрдЯ-рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ (рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдПрд╕реАрдПрдордИ рд╕рд░реНрд╡рд░ рдореЗрдВ рд╣реИ)ред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:

apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory 
    privateKeySecretRef:
      name: letsencrypt
    solvers:
    - http01:
       ingress:
         class: nginx
---
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: le-crt
spec:
  secretName: tls-secret
  issuerRef:
    kind: Issuer
    name: letsencrypt
  commonName: yet-another.website
  dnsNames:
  - yet-another.website

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛ servery acme(c Issuer) рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ ред рдЗрд╕реЗ рдПрдХ рд▓рдбрд╝рд╛рдИ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ рдмрд╛рдж рдореЗрдВ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкреВрд░реЗ рдСрд░реНрдбрд░ рдкрде рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ:



  1. рд╕реГрдЬрди CertificateрдиреЗ рдПрдХ рдирдпрд╛ рд╕рдВрд╕рд╛рдзрди рдкреИрджрд╛ рдХрд┐рдпрд╛ CertificateRequest:

    kubectl -n app describe certificate le-crt
    ...
    Created new CertificateRequest resource "le-crt-1127528680"
  2. рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ - рдирд┐рд░реНрдорд╛рдг рдкрд░ рдПрдХ рдирд┐рд╢рд╛рди Order:

    kubectl -n app describe certificaterequests le-crt-1127528680
    тАж
    Created Order resource app/le-crt-1127528680-1805948596
  3. рдпрд╣ Orderрдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╕рдВрд╕рд╛рдзрди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Challenge:

    kubectl -n app describe order le-crt-1127528680-1805948596
    тАж
    Created Challenge resource "le-crt-1127528680-1805948596-1231544594" for domain "yet-another.website"
  4. рдЕрдВрдд рдореЗрдВ, рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╕реНрдХреИрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ:

    kubectl -n app describe challenges le-crt-1127528680-1805948596-1231544594
    ...
      Reason:      Successfully authorized domain                                                                                                                                                                      
    ...
      Normal  Started         2m45s  cert-manager  Challenge scheduled for processing
      Normal  Presented       2m45s  cert-manager  Presented challenge using http-01 challenge mechanism
      Normal  DomainVerified  2m22s  cert-manager  Domain "yet-another.website" verified with "http-01" validation

рдпрджрд┐ рд╕рднреА рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╛рдиреА рдбреЛрдореЗрди рдмрд╛рд╣рд░ рд╕реЗ рд╕реБрд▓рдн рд╣реИ, рддреЛ LE рд╕реЗ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИ ...) - рдПрдХ рдорд┐рдирдЯ рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ, рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдПрдХ describe certificate le-crtрд░рд┐рдХреЙрд░реНрдб рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ Certificate issued successfullyред

рдЕрдм рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкрддреЗ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ ( https://acme-v02.api.letsencrypt.org/directory) рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЕрд╕рд▓реА рдкреНрд░рдорд╛рдг рдкрддреНрд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдСрд░реНрдбрд░ рдХрд░реЗрдВ Fake LE Intermediate X1, рд▓реЗрдХрд┐рди рдирд╣реАрдВ Let's Encrypt Authority X3ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ Certificate: рдЕрдиреНрдпрдерд╛, рдХреЛрдИ рднреА рдЖрджреЗрд╢ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдПрдХ рд░рд╣рд╕реНрдп рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рддрддреНрдХрд╛рд▓ рд╡рд╛рдкрд╕реА рд╣реЛрдЧреА describe certificate:

  Normal  PrivateKeyLost  44s                   cert-manager  Lost private key for CertificateRequest "le-crt-613810377", deleting old resource

рдпрд╣ Issuerрдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдКрдкрд░ рд╡рд░реНрдгрд┐рдд Certificate(рдпрд╣ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП "рдореБрдХрд╛рдмрд▓рд╛" рдШреЛрд╖рдгрд╛рдкрддреНрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ :

apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt
    solvers:
    - http01:
       ingress:
         class: nginx

рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж Certificate issued successfully, describeрдЗрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ:

kubectl -n app get secret tls-secret -ojson | jq -r '.data."tls.crt"' | base64 -d | openssl x509 -dates -noout -issuer
notBefore=Feb 10 21:11:48 2020 GMT
notAfter=May 10 21:11:48 2020 GMT
issuer=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3

рд╕рдВрдЦреНрдпрд╛ 3ред рдбреАрдПрдирдПрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рд▓реЗ


рд╣рдо рд╕рд╛рдЗрдЯ рдХреЗ рд╕рднреА рдЙрдк-рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд▓рд┐рдЦрдХрд░ рдФрд░ рдЗрд╕ рдмрд╛рд░ DNS рдЪреЗрдХ (CloudFlare рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдВрдЧреЗред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CloudFlare рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдореЗрдВ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

  1. рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ тЖТ рдПрдкреАрдЖрдИ рдЯреЛрдХрди тЖТ рдЯреЛрдХрди рдмрдирд╛рдПрдБред
  2. рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд░реЗрдВ:
    • рдЕрдиреБрдорддрд┐рдпрд╛рдВ:
      • рдХреНрд╖реЗрддреНрд░ - DNS - рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
      • рдЬреЛрди - рдЬрд╝реЛрди - рдкрдврд╝реЗрдВ
    • рдХреНрд╖реЗрддреНрд░ рд╕рдВрд╕рд╛рдзрди:
      • рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ - рд╕рднреА рдХреНрд╖реЗрддреНрд░
  3. рдмрдЪрдд рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП :) y_JNkgQwkroIsflbbYqYmBooyspN6BskXZpsiH4Mред

рдПрдХ рд╕реАрдХреНрд░реЗрдЯ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЯреЛрдХрди рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕реЗ рдЬрд╛рд░реАрдХрд░реНрддрд╛ рдореЗрдВ рджреЗрдЦреЗрдВ:

apiVersion: v1
kind: Secret
metadata:
  name: cloudflare-api-token
type: Opaque
stringData:
  api-token: y_JNkgQwkroIsflbbYqYmBooyspN6BskXZpsiH4M
---
apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory 
    privateKeySecretRef:
      name: letsencrypt
    solvers:
    - dns01:
        cloudflare:
          email: my-cloudflare-acc@example.com
          apiTokenSecretRef:
            name: cloudflare-api-token
            key: api-token

---
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: le-crt
spec:
  secretName: tls-secret
  issuerRef:
    kind: Issuer
    name: letsencrypt
  commonName: yet-another.website
  dnsNames:
  - "yet-another.website"
  - "*.yet-another.website"

(рдпрджрд┐ рдЖрдк рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдордВрдЪрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ!)

рдбреЛрдореЗрди рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рджреЗрдВ:

kubectl -n app describe challenges.acme.cert-manager.io le-crt-613810377-1285319347-3806582233
...
Status:
  Presented:   true
  Processing:  true
  Reason:      Waiting for dns-01 challenge propagation: DNS record for "yet-another.website" not yet propagated
  State:       pending
Events:
  Type    Reason     Age   From          Message
  ----    ------     ----  ----          -------
  Normal  Started    54s   cert-manager  Challenge scheduled for processing
  Normal  Presented  53s   cert-manager  Presented challenge using dns-01 challenge mechanism

рдкреИрдирд▓ рдореЗрдВ рдПрдХ TXT рд░рд┐рдХреЙрд░реНрдб рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:



... рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреА:

Domain "yet-another.website" verified with "dns-01" validation

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХрд┐рд╕реА рднреА рдЙрдкрдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИ:

kubectl -n app get secret tls-secret -ojson | jq -r '.data."tls.crt"' | base64 -d | openssl x509 -dates -noout -text |grep DNS:
          DNS:*.yet-another.website, DNS:yet-another.website

рдбреАрдПрдирдПрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рддреНрдпрд╛рдкрди, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд▓реНрджреА рд╕реЗ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреАрдПрдирдПрд╕ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдЕрд╡рдзрд┐ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддреА рд╣реИ рдХрд┐ рдбреАрдПрдирдПрд╕ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдкрд▓ рднрд░ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рдмреАрдд рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рднреА рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдбреАрдПрдирдПрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдкрдбреЗрдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, ACME рдорд╛рдирдХ рджреЛ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рд╡рд░рдг IssuerрдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt
    solvers:
    - selector:
        dnsNames:
        - "*.yet-another.website"
      dns01:
        cloudflare:
          email: my-cloudflare-acc@example.com
          apiTokenSecretRef:
            name: cloudflare-api-token
            key: api-token            
    - selector:
        dnsNames:
        - "yet-another.website"
      http01:
        ingress:
          class: nginx

рдпрджрд┐ рдЖрдк рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рджреЛ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ Challenge:

kubectl -n app describe orders le-crt-613810377-1285319347
тАж
  Normal  Created  3m29s  cert-manager  Created Challenge resource "le-crt-613810377-1285319347-3996324737" for domain "yet-another.website"                 
  Normal  Created  3m29s  cert-manager  Created Challenge resource "le-crt-613810377-1285319347-1443470517" for domain "yet-another.website"

рдЪрд╛рд░ рдирдВрдмрд░ред рдЗрдирдЧреНрд░реЗрд╢рди рд╕реНрдкреЗрд╢рд▓ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ-рдореИрдиреЗрдЬрд░ рдореЗрдВ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд░рд╛рд╕реНрддреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдВрдЧреНрд░реЗрд╕-рд╢рд┐рдо рдирд╛рдордХ рдПрдХ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдирд╛ рдирд╣реАрдВ рд╣реИ Certificateред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рдЗрдирдЧреНрд░реЗрдб рдПрдиреЛрдЯреЗрд╢рди рдХреА рдорджрдж рд╕реЗ, рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЧрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрд░реНрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ Issuerред рдкрд░рд┐рдгрд╛рдо рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕рд╛рдзрди рд╣реИ:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt
spec:
  tls:
  - hosts:
    - "yet-another.website"
    secretName: tls-secret
  rules:
  - host: "yet-another.website"
    http:
      paths:
      - path: /
        backend:
          serviceName: app
          servicePort: 8080

рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдЬрд╛рд░реАрдХрд░реНрддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╣рд╛рдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЕрд░реНрдерд╛рдд рдПрдХ рдХрдо рдЗрдХрд╛рдИ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдПрдиреЛрдЯреЗрд╢рди рдХреНрдпреВрдм-рд▓реЗрдЧреЛ рд╣реИ - kubernetes.io/tls-acme: "true", - рдЬрд┐рд╕реЗ Issuerрд╣реЗрд▓реНрдо рдорд╛рдкрджрдВрдбреЛрдВ (рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгрд┐рдд-рдкреНрд░рдмрдВрдзрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреМрдХрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред

рд╣рдо рдХрдВрдкрдиреА рдореЗрдВ рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрд╕рдПрд╕рдПрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░ (рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг рдЙрдиреНрд╣реЗрдВ рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЕрдзрд┐рдХ рд╕рдВрдкреВрд░реНрдг рдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


CRD рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдСрдЯреЛ-рдЕрдХреНрд╖рдп, рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд, рдФрд░ Kubernetes рд╕рдореВрд╣реЛрдВ рдореЗрдВ Ingresss рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рдХреА рдЧрдИ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдПрдирдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдлреНрд░реА SSL рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд▓реЗрдЦ рд╣рдорд╛рд░реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рдорд╛рдгрд┐рдд-рдкреНрд░рдмрдВрдзрдХ рдлрд╝рдВрдХреНрд╢рди рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЖрдк рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдВрдбрд▓ рдпрд╛ рдмрд╛рд╣рд░реА рдЬрд╛рд░реА рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗрдВрджреНрд░ (рдЬрд╛рд░реАрдХрд░реНрддрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧред

рдкреБрдирд╢реНрдЪ


рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ:


All Articles