gpt4 book ai didi

docker - 使用minikube访问kubernetes集群外的应用

转载 作者:行者123 更新时间:2023-12-02 12:12:58 26 4
gpt4 key购买 nike

我是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返回:

curl: (7) Failed to connect to Node IP port NodePORT: Connection refused

最佳答案

如@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

关于docker - 使用minikube访问kubernetes集群外的应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60531396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com