我在Windows 10上使用minikube。并且我生成kubernetes NodePort服务以从客户端Web浏览器进行访问。首先,以下代码是资源配置文件。
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
Kubernetes容器和服务已成功生成。
> 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
但是,即使使用所有这些URL,也会拒绝对此kubernetes nodeport服务的访问。
http://10.100.32.119:31000
http://10.100.32.119:8080
http://192.168.5.25:31000
我不知道错误在资源配置文件,服务部分或Pod部分上。任何想法,请。
答案 0 :(得分:3)
您的服务的targetPort
与您的Pod的containerPort
不匹配。
您的服务声明说,群集中任何节点上的nodePort
31000,或群集中特殊主机名port
上的blog-app-svc.default.svc.cluster.local
8080,都转发到targetPort
80在某些带有app: blog-pod
标签的广告连播中。您有那个吊舱,但它正在监听端口8080和3306,而不是端口80。
如果交换port
和targetPort
,则服务上的默认HTTP端口80将转发到pod中的端口8080,这很可能就是您想要的。
答案 1 :(得分:0)
看来您的NodePort的配置正确。有关故障排除的一些建议是,这可能是由Kubernetes Worker节点上运行的防火墙引起的。
因此,请确保31000已打开,并且您应该能够从Kubernetes API服务器解析该IP。
其次,您应该考虑向群集中添加一个LoadBalancer controller,这样就不必使用NodePorts。除了调试以外,它们并没有真正的用途。