gpt4 book ai didi

docker - 使用Docker的Kubernetes无法从默认端口80更改

转载 作者:行者123 更新时间:2023-12-02 20:05:47 25 4
gpt4 key购买 nike

我正在使用Kubernetes和Docker运行一个dotnet核心应用程序。

设置如下:

APP

在dotnet核心应用程序中,我通过在Program.cs中设置以下内容来使Kestrel服务器在端口8080上侦听:

public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 8080);
})
.Build();

我已经在本地测试了应用程序的构建,并且端点在 localhost:8080/api/test上按预期工作。

DOCKER IMAGE

在Dockerfile中,我具有以下内容:
EXPOSE 8080

我理解这意味着该容器使用暴露的8080端口构建。

问题1:...这是否必然意味着容器的8080映射到应用程序的8080?如果没有,我该如何映射?

KUBERNETES(MINIKUBE)

然后,在Kubernetes(在Minikube上本地运行)内,使用复制 Controller 创建3个Pod,每个Pod包含1个Docker容器。我的RC文件如下所示:
{
"apiVersion": "v1",
"kind": "ReplicationController",
"spec": {
"replicas": 3,
"selector": {
"app": "myApp"
},
"template": {
"metadata": {
"labels": {
"app": "myApp"
}
},
"spec": {
"containers": [
{
"name": "my-app",
"image": "myname/myapp:1.0",
"ports": [
{
"containerPort": 8080
}
]
}
]
}
}
}
}

注意 "ports": [{ "containerPort": 8080 }]。以我的理解,这意味着我要公开的容器端口是8080。

然后,我有了一个Kubernetes服务,该服务通过端点 [minikubeIPAddress]:30001公开了我的3个Pod的8080端口:
{
"apiVersion": "v1",
"kind": "Service",
"spec": {
"type": "NodePort",
"ports": [
{
"port": 8080,
"nodePort": 30001,
"protocol": "TCP"
}
],
"selector": {
"app": "myApp"
}
}
}

当我尝试点击端点 [minikubeIPAddress]:30001/api/test时,出现“无法访问网站”错误。

我今天早上使用默认的HTTP端口80时,它已经正常工作。唯一已做的更改是端口号。

问题2:...我在这里错过了什么吗?沿线是否有仍映射到默认端口80的连接?

任何帮助将非常感激。

最佳答案

使用“targetPort”指示您的Pod正在侦听的端口。您的Yaml规范应类似于:

---
apiVersion: v1
kind: Service
metadata:
name: myApp
spec:
selector:
app: myApp
ports:
- name: http
port: 8080
targetPort: 8080
nodePort: 30001

关于docker - 使用Docker的Kubernetes无法从默认端口80更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49599985/

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