<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Load-Balancer on inetshell</title><link>https://inet.sh/es/tags/load-balancer/</link><description>Recent content in Load-Balancer on inetshell</description><generator>Hugo</generator><language>es</language><lastBuildDate>Sat, 26 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/es/tags/load-balancer/index.xml" rel="self" type="application/rss+xml"/><item><title>Certificado gestionado de Google que nunca se emite: CAA (pki.goog, letsencrypt.org), FAILED_NOT_VISIBLE y el orden correcto</title><link>https://inet.sh/es/posts/gcp/certificado-gestionado-google-caa/</link><pubDate>Sat, 26 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/gcp/certificado-gestionado-google-caa/</guid><description>El certificado gestionado de Google para un balanceador HTTPS lleva horas en PROVISIONING o cae a FAILED_NOT_VISIBLE o FAILED_CAA_FORBIDDEN. Las tres causas: el DNS todavía no apunta a la IP del balanceador, el certificado no está adjunto a un target proxy, o un registro CAA de la zona no autoriza a pki.goog ni a letsencrypt.org. Cómo comprobar el estado con gcloud, el CAA correcto, y Certificate Manager con autorización DNS para emitir antes de cambiar el DNS.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">example.com.   CAA 0 issue &#34;pki.goog&#34;
</span></span><span class="line"><span class="cl">example.com.   CAA 0 issue &#34;letsencrypt.org&#34;
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">gcloud compute ssl-certificates describe web-cert --global --format<span class="o">=</span><span class="s1">&#39;yaml(managed)&#39;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># managed:</span>
</span></span><span class="line"><span class="cl"><span class="c1">#   domainStatus:</span>
</span></span><span class="line"><span class="cl"><span class="c1">#     www.example.com: PROVISIONING | ACTIVE | FAILED_NOT_VISIBLE | FAILED_CAA_FORBIDDEN | FAILED_CAA_CHECKING | FAILED_RATE_LIMITED</span>
</span></span><span class="line"><span class="cl"><span class="c1">#   status: PROVISIONING | ACTIVE</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Para que pase a <code>ACTIVE</code> tienen que cumplirse tres cosas a la vez: el <strong>A/AAAA</strong> del dominio apunta a la IP del balanceador (y a nada más), el certificado está <strong>adjunto a un target proxy</strong> con su forwarding rule, y ningún <strong>CAA</strong> de la zona prohíbe a las CAs de Google. Después, hasta <strong>60 minutos</strong>.</p>
<h2 id="por-qué">Por qué</h2>
<p>Google emite los certificados gestionados con <strong>Google Trust Services</strong> (<code>pki.goog</code>) o con <strong>Let&rsquo;s Encrypt</strong>, y elige una u otra en cada emisión o renovación. Para validar el dominio hace una comprobación HTTP contra la IP a la que resuelve el nombre, así que hasta que el DNS apunte al balanceador no hay nada que validar. Y como cualquier CA, respeta los registros <strong>CAA</strong>: si tu zona dice que solo <code>digicert.com</code> puede emitir (política corporativa típica), Google no puede.</p>
<p>Los estados lo cuentan:</p>
<table>
  <thead>
      <tr>
          <th><code>domainStatus</code></th>
          <th>Causa</th>
          <th>Qué hacer</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>PROVISIONING</code></td>
          <td>En curso</td>
          <td>Esperar; si pasa de 60 minutos, revisar lo de abajo</td>
      </tr>
      <tr>
          <td><code>FAILED_NOT_VISIBLE</code></td>
          <td>El nombre no resuelve a la IP del balanceador, o el certificado no está adjunto a un target proxy</td>
          <td>Corregir A/AAAA, adjuntar el certificado, esperar la propagación</td>
      </tr>
      <tr>
          <td><code>FAILED_CAA_CHECKING</code></td>
          <td>Google no pudo leer los CAA (DNS que no responde, DNSSEC roto)</td>
          <td>Arreglar la zona</td>
      </tr>
      <tr>
          <td><code>FAILED_CAA_FORBIDDEN</code></td>
          <td>Hay CAA y no incluye a <code>pki.goog</code> ni a <code>letsencrypt.org</code></td>
          <td>Añadir los dos registros</td>
      </tr>
      <tr>
          <td><code>FAILED_RATE_LIMITED</code></td>
          <td>Demasiados intentos de emisión</td>
          <td>Esperar; no recrear el certificado en bucle</td>
      </tr>
  </tbody>
</table>
<h2 id="el-caa-correcto">El CAA correcto</h2>
<p>Sin ningún registro CAA, cualquier CA puede emitir y Google funciona. Si tienes CAA (o tu organización lo exige), añade <strong>las dos</strong> CAs:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">example.com.   CAA 0 issue &#34;pki.goog&#34;
</span></span><span class="line"><span class="cl">example.com.   CAA 0 issue &#34;letsencrypt.org&#34;
</span></span></code></pre></td></tr></table>
</div>
</div><p>Poner solo una obliga a Google a usar siempre esa; la documentación lo desaconseja porque una renovación puede salir por la otra. Los CAA se heredan hacia abajo: un CAA en <code>example.com</code> cubre <code>www.example.com</code> si el subdominio no tiene el suyo.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">dig +short CAA example.com
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="certificate-manager-emitir-antes-de-cambiar-el-dns">Certificate Manager: emitir antes de cambiar el DNS</h2>
<p>Con los certificados clásicos (<code>compute ssl-certificates</code>) el dominio tiene que apuntar ya al balanceador, lo que en una migración significa unos minutos de HTTPS roto. <strong>Certificate Manager</strong> resuelve eso con <strong>autorización DNS</strong>: publicas un CNAME de validación y Google emite el certificado mientras el tráfico sigue en el sitio viejo.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">gcloud certificate-manager dns-authorizations create www-auth --domain<span class="o">=</span>www.example.com
</span></span><span class="line"><span class="cl">gcloud certificate-manager dns-authorizations describe www-auth --format<span class="o">=</span><span class="s1">&#39;yaml(dnsResourceRecord)&#39;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># dnsResourceRecord: name: _acme-challenge.www.example.com. type: CNAME data: xxxx.authorize.certificatemanager.goog.</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># publica ese CNAME en tu zona y luego:</span>
</span></span><span class="line"><span class="cl">gcloud certificate-manager certificates create www-cert <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --domains<span class="o">=</span>www.example.com --dns-authorizations<span class="o">=</span>www-auth
</span></span><span class="line"><span class="cl">gcloud certificate-manager maps create web-map
</span></span><span class="line"><span class="cl">gcloud certificate-manager maps entries create www --map<span class="o">=</span>web-map --certificate<span class="o">=</span>www-cert --hostname<span class="o">=</span>www.example.com
</span></span><span class="line"><span class="cl">gcloud compute target-https-proxies update web-proxy --certificate-map<span class="o">=</span>web-map
</span></span></code></pre></td></tr></table>
</div>
</div><p>Cuando el certificado esté <code>ACTIVE</code>, cambias el A/AAAA y el corte es cero. Los CAA aplican igual.</p>
<h2 id="trampas">Trampas</h2>
<ul>
<li><strong>Cloudflare u otro proxy delante</strong> del balanceador: el A apunta al proxy, no a Google, y la validación falla con <code>FAILED_NOT_VISIBLE</code>. Nube gris durante la emisión, o Certificate Manager con autorización DNS.</li>
<li><strong>Un certificado gestionado no adjunto a nada no se emite.</strong> Crearlo y esperar no hace nada; adjúntalo al target proxy primero.</li>
<li><strong>Cambiar la lista de dominios</strong> crea un certificado nuevo: adjunta el nuevo, espera <code>ACTIVE</code>, y solo entonces quita el viejo del proxy, o tendrás un hueco.</li>
<li><strong>Wildcards</strong> solo con Certificate Manager y autorización DNS; los certificados gestionados clásicos no los admiten.</li>
<li><strong>DNSSEC mal firmado</strong> rompe la lectura de CAA: <code>FAILED_CAA_CHECKING</code> aunque no tengas ningún CAA.</li>
</ul>
<p>Referencia: <a href="https://docs.cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs">Google-managed SSL certificates</a> y <a href="https://docs.cloud.google.com/certificate-manager/docs/overview">Certificate Manager</a> en la documentación de Google Cloud.</p>
]]></content:encoded></item></channel></rss>