<p>I have a kubernetes service called <code>staging</code> that selects all <code>app=jupiter</code> pods. It exposes an HTTP service on port 1337. Here's the describe output:</p>

<pre><code>$ kubectl describe service staging
Name:           staging
Namespace:      default
Labels:         run=staging
Selector:       app=jupiter
Type:           NodePort
IP:             10.11.255.80
Port:           &lt;unnamed&gt;   1337/TCP
NodePort:       &lt;unnamed&gt;   30421/TCP
Endpoints:      10.8.0.21:1337
Session Affinity:   None
No events.
</code></pre>

<p>But when I run a <code>kubectl rolling-update</code> on the RC, which removes the 1 pod running the application and adds another, and run describe again, I get:</p>

<pre><code>$ kubectl describe service staging
Name:           staging
Namespace:      default
Labels:         run=staging
Selector:       app=jupiter
Type:           NodePort
IP:             10.11.255.80
Port:           &lt;unnamed&gt;   1337/TCP
NodePort:       &lt;unnamed&gt;   30421/TCP
Endpoints:      10.8.0.22:1337
Session Affinity:   None
No events.
</code></pre>

<p>Everything is the same, except for the Endpoint IP address. In fact, it goes up by 1 every time I do this. This is the one thing I expected not to change, since services are an abstraction over pods, so they shouldn't change when the pods change.</p>

<p>I know you can hardcode the endpoint address, so this is more of a curiosity.</p>

<p>Also, can anyone tell me what the <code>IP</code> field in the describe output is for?</p>

<p>IP is the address of your service, which remains constant over time. Endpoints is the collection of backend addresses across which requests to the service address are spread at a given point in time.  That collection changes every time the set of pods comprising your service changes, as you've noticed when performing a rolling update on your replication controller (RC).</p>
