<p>I have run a simple command:</p>

<pre><code>kubectl api-resources
</code></pre>

<p>I was a bit surprised to get duplicates (albeit in different Api groups), e.g.:</p>

<pre><code>NAME                              SHORTNAMES   APIGROUP                NAMESPACED   KIND 
ingresses                         ing          extensions              true         Ingress
ingresses                         ing          networking.k8s.io       true         Ingress
</code></pre>

<p>Is it the same resource, just listed twice because it belongs to different api groups at the same time and the result of the following calls are always the same?</p>

<pre><code>kubectl get ingress
kubectl get ingress.networking.k8s.io
kubectl get ingress.extensions
</code></pre>

<p>These are actually different versions of the same resource in different API groups.</p>

<p>In general, when new resource types are introduced to Kubernetes, they are first managed in the <code>extensions</code> API group (iterating through multiple versions). Once the resources are regarded stable, they are moved to a "stable" API group, such as <code>apps</code> or <code>networking.k8s.io</code> (explained, for example, <a href="https://kubernetes.io/blog/2019/09/18/kubernetes-1-16-release-announcement/" rel="nofollow noreferrer">here</a>).</p>

<p>The fact that Ingress is listed in both API groups means that your API server can understand versions of this resource from both API groups.</p>

<p>The specifications of the specific resource versions may differ. You can compare them, for example, with:</p>

<pre><code>kubectl explain --api-version=extensions/v1beta1 ingress
</code></pre>

<p>vs.</p>

<pre><code>kubectl explain --api-version=networking.k8s.io/v1beta1 ingress
</code></pre>

<p>In-depth explanations of how the API server handles different versions of a resource can be found in this <a href="https://blog.openshift.com/kubernetes-deep-dive-api-server-part-1/" rel="nofollow noreferrer">article series</a>.</p>
