我是kubernetes的新手,我正在尝试使用minikube学习它,而且在访问集群外的应用程序时遇到了问题。我创建了一个部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 8080
要访问它,我需要装饰性地或强制性地公开它。以命令式方式起作用:
kubectl expose deployment nginx-deployment --port 80 --type NodePort
当我以声明方式创建服务时,我总是会遇到拒绝连接错误:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
type : NodePort
ports:
- port : 8080
nodePort : 30018
protocol : TCP
selector:
app: nginx
curl -k http://NodeIP:NodePort返回:
卷曲:(7)无法连接到节点IP端口NodePORT:连接 拒绝
答案 0 :(得分:1)
按照@Ansil的建议,如果要在8080
定义中引用此端口,则应将您的 nginx 配置为侦听端口Service
。默认情况下,它在端口80
上侦听。
仅通过在您的8080
定义中指定不同的containerPort
(如您的示例),就无法使其像Deployment
一样在不同的端口上侦听:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 8080
通过附加到这样的Pod
上,您可以轻松地自己进行验证:
kubectl exec -ti <nginx-pod-name> -- /bin/bash
一旦到达,请运行:
ss -ntlp
您应该看到您的 nginx 实际上在哪个端口上监听。
此外,您可以:
cat /etc/nginx/conf.d/default.conf
它还会告诉您 nginx 在哪个端口上进行监听。就这样。真的很简单。您将containerPort
更改为8080
,但是在您的容器中实际上没有任何内容在该端口上侦听。
您仍然可以将其公开为Service
(无论是声明式还是命令式),但它不会更改任何内容,因为最终它指向容器上的错误端口,在该端口上没有任何侦听的内容,您将看到与此类似的消息:
curl: (7) Failed to connect to 10.1.2.3 port 30080: Connection refused
答案 1 :(得分:0)
在minikube中创建服务后,可以使用命令
将服务公开到minikube VM(主机)的外部。 minikube service SERVICE_NAME
引用:https://minikube.sigs.k8s.io/docs/reference/commands/service/