<p>I'm tring install helm chart with nodeport on specific port. For example: <code>30005</code>, but helm ignoring nodeport section.</p>

<pre><code>==&gt; v1/Service
NAME       TYPE      CLUSTER-IP     EXTERNAL-IP  PORT(S)         AGE
hello-app  NodePort  10.109.69.245  &lt;none&gt;       8080:32146/TCP  0s
</code></pre>

<p>I tried set specific port:</p>

<pre><code>helm install --set service.type=NodePort,service.nodePort=30005 --name hello-app /home/ubuntu/hello-app
</code></pre>

<p>My <code>values.yaml</code> "service" section.</p>

<pre><code>imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

service:
  type: NodePort
  port: 8080
  nodePort: 30005
</code></pre>

<p>My expected result:</p>

<pre><code>==&gt; v1/Service
NAME       TYPE      CLUSTER-IP     EXTERNAL-IP  PORT(S)         AGE
hello-app  NodePort  10.109.69.245  &lt;none&gt;       8080:30005/TCP  0s
</code></pre>

<p>Apparently you have somewhere in your service's helm template a typo, or skipped the fact, that variable names are case sensitive. Please double check it.</p>

<p>Take a look also at the official reference <a href="https://github.com/helm/helm/tree/master/docs/examples/nginx" rel="nofollow noreferrer">nginx</a> chart example, where <a href="https://raw.githubusercontent.com/helm/helm/master/docs/examples/nginx/templates/service.yaml" rel="nofollow noreferrer">service</a> helm template lets <code>type</code> and <code>nodePort</code> be configurable by the end user too, which works perfectly with helm overridden parameters (--set).</p>

<p>You can verify the manifest files rendered by helm before release installation with following command:</p>

<pre><code>helm template --set service.type=NodePort --set service.nodePort=31000 --debug docs/examples/nginx/
</code></pre>

<p><strong>Last thing:</strong><br> <br>
Be sure, that specified by you nodePort is not in use already. <br>You can do it using <code>--server-dry-run</code> option with <code>kubectl</code>, e.g.</p>

<p><code>kubectl apply -f service-31000-nodeport-conflict.yaml --server-dry-run</code></p>

<p>In case it's already occupied you would see similar error to this one, returned from API server:</p>

<pre><code>The Service "release-name-nginx-conflict" is invalid: spec.ports[0].nodePort: Invalid value: 31000: provided port is already allocated
</code></pre>
