<p dir="auto">Given <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="171960429" data-permission-text="Title is private" data-url="https://github.com/kubernetes/kubernetes/issues/30908" data-hovercard-type="issue" data-hovercard-url="/kubernetes/kubernetes/issues/30908/hovercard" href="https://github.com/kubernetes/kubernetes/issues/30908">#30908</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="171961268" data-permission-text="Title is private" data-url="https://github.com/kubernetes/kubernetes/issues/30909" data-hovercard-type="issue" data-hovercard-url="/kubernetes/kubernetes/issues/30909/hovercard" href="https://github.com/kubernetes/kubernetes/issues/30909">#30909</a>, it feels like maybe we would do well to make "Headless" an actual value for cluster.spec.type.  Specifically, we don't intend to support node-ports or load-balancers for headless services, but it is possible to specify that intersection.</p>
<p dir="auto">It would be cleaner, I think, to say:</p>
<p dir="auto">headless-params:</p>
<ul dir="auto">
<li>selector (optional)</li>
<li>ports[*].port, protocol,  and name</li>
</ul>
<p dir="auto">clusterip-params:</p>
<ul dir="auto">
<li>all of headless-params</li>
<li>clusterip (optional else assigned)</li>
<li>ports[*].targetPort</li>
<li>sessionAffinity</li>
</ul>
<p dir="auto">nodeport-params:</p>
<ul dir="auto">
<li>all of clusterip-params</li>
<li>ports[*].nodePort</li>
</ul>
<p dir="auto">loadbalancer-params:</p>
<ul dir="auto">
<li>all of nodeport-params</li>
<li>loadBalancerIP</li>
<li>loadBalancerSourceRanges</li>
</ul>
<p dir="auto">With <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="171084806" data-permission-text="Title is private" data-url="https://github.com/kubernetes/kubernetes/issues/30599" data-hovercard-type="pull_request" data-hovercard-url="/kubernetes/kubernetes/pull/30599/hovercard" href="https://github.com/kubernetes/kubernetes/pull/30599">#30599</a> we add:</p>
<p dir="auto">externalname-params:</p>
<ul dir="auto">
<li>externalName</li>
</ul>
<p dir="auto">I argued against this before, but I am not sure why.  Looking at history, I don't find my own arguments that compelling, but maybe I am missing some.</p>