<p><strong>Question 1</strong> - I'm reading the documentation and I'm slightly confused with the wording. It says:</p>
<blockquote>
<p><strong>ClusterIP</strong>: Exposes the service on a cluster-internal IP. Choosing this value makes the service only reachable from within the cluster. This is the default ServiceType</p>
<p><strong>NodePort</strong>: Exposes the service on each Node’s IP at a static port (the NodePort). A ClusterIP service, to which the NodePort service will route, is automatically created. You’ll be able to contact the NodePort service, from outside the cluster, by requesting <code>&lt;NodeIP&gt;:&lt;NodePort&gt;</code>.</p>
<p><strong>LoadBalancer</strong>: Exposes the service externally using a cloud provider’s load balancer. NodePort and ClusterIP services, to which the external load balancer will route, are automatically created.</p>
</blockquote>
<p>Does the NodePort service type still use the <code>ClusterIP</code> but just at a different port, which is open to external clients? So in this case is <code>&lt;NodeIP&gt;:&lt;NodePort&gt;</code> the same as <code>&lt;ClusterIP&gt;:&lt;NodePort&gt;</code>?</p>
<p>Or is the <code>NodeIP</code> actually the IP found when you run <code>kubectl get nodes</code> and not the virtual IP used for the ClusterIP service type?</p>
<p><strong>Question 2</strong> - Also in the diagram from the link below:</p>
<p><a href="https://i.stack.imgur.com/P36yL.png" rel="noreferrer"><img src="https://i.stack.imgur.com/P36yL.png" alt="enter image description here" /></a></p>
<p>Is there any particular reason why the <code>Client</code> is inside the <code>Node</code>? I assumed it would need to be inside a <code>Cluster</code>in the case of a ClusterIP service type?</p>
<p>If the same diagram was drawn for NodePort, would it be valid to draw the client completely outside both the <code>Node</code> and<code>Cluster</code> or am I completely missing the point?</p>

AmazingBergkamp
<p>A ClusterIP exposes the following:</p>
<ul>
<li><code>spec.clusterIp:spec.ports[*].port</code></li>
</ul>
<p>You can only access this service while inside the cluster. It is accessible from its <code>spec.clusterIp</code> port. If a <code>spec.ports[*].targetPort</code> is set it will route from the port to the targetPort. The CLUSTER-IP you get when calling <code>kubectl get services</code> is the IP assigned to this service within the cluster internally.</p>
<p>A NodePort exposes the following:</p>
<ul>
<li><code>&lt;NodeIP&gt;:spec.ports[*].nodePort</code></li>
<li><code>spec.clusterIp:spec.ports[*].port</code></li>
</ul>
<p>If you access this service on a nodePort from the node's external IP, it will route the request to <code>spec.clusterIp:spec.ports[*].port</code>, which will in turn route it to your <code>spec.ports[*].targetPort</code>, if set. This service can also be accessed in the same way as ClusterIP.</p>
<p>Your NodeIPs are the external IP addresses of the nodes. You cannot access your service from <code>spec.clusterIp:spec.ports[*].nodePort</code>.</p>
<p>A LoadBalancer exposes the following:</p>
<ul>
<li><code>spec.loadBalancerIp:spec.ports[*].port</code></li>
<li><code>&lt;NodeIP&gt;:spec.ports[*].nodePort</code></li>
<li><code>spec.clusterIp:spec.ports[*].port</code></li>
</ul>
<p>You can access this service from your load balancer's IP address, which routes your request to a nodePort, which in turn routes the request to the clusterIP port. You can access this service as you would a NodePort or a ClusterIP service as well.</p>
