I am using minikube on windows 10. And I generate kubernetes NodePort Service to access from client web browser. First the below codes are resources configuration file.
apiVersion: v1
kind: Pod
metadata:
name: blog-system
labels:
app: blog-pod
spec:
containers:
- name: blog-app
image: app:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
args: ["-t", "-i"]
- name: blog-mysql
image: mysql:latest
env:
- name: MYSQL_ROOT_PASSWORD
value: password
- name: MYSQL_PASSWORD
value: password
- name: MYSQL_DATABASE
value: test
ports:
- containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
name: blog-app-svc
spec:
type: NodePort
selector:
app: blog-pod
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 80
nodePort: 31000
The Kubernetes pods and services are generated successfully.
> kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
blog-app-svc NodePort 10.100.32.119 <none> 8080:31000/TCP 79s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5m54s
> minikube service blog-app-svc --url
http://192.168.5.25:31000
However the access to this kubernetes nodeport service is rejected even with all of these urls.
http://10.100.32.119:31000
http://10.100.32.119:8080
http://192.168.5.25:31000
I have no idea where the errors are on the resources configuration file, service part or pod part. Any idea, please.
It appears that the configuration is correct for your NodePort. Some advice for troubleshooting is that this is likely caused by a firewall running on your Kubernetes Worker Node.
So ensure that 31000 is open and you should be able to resolve that IP from the Kubernetes API Server.
Secondly, you should look into adding a LoadBalancer controller to your cluster so you don't have to use NodePorts. They're not really used for anything other than debugging.
The targetPort
of your Service doesn't match the containerPort
of your Pod.
Your Service declaration says that nodePort
31000 on any node in the cluster, or port
8080 on the special host name blog-app-svc.default.svc.cluster.local
within the cluster, forwards to targetPort
80 in some pod with an app: blog-pod
label. You have that pod, but it's listening to ports 8080 and 3306 and not port 80.
If you swap port
and targetPort
then the default HTTP port 80 on the Service will forward to port 8080 in your pod, which is probably what you're after.