尝试将端点从 kubernetes pod 公开到互联网/浏览器/API
Trying to expose an endpoint from a kubernetes pod to the internet/ browser/ API
我想做什么
尝试在启用了 WSL 2 的 Windows 11 平台上并使用 Powershell,Docker 在 Windows、kubectl 和 minikube。这对于解决我的开发环境至关重要。
会发生什么
根据我在文档和网上找到的任何内容,我将 Loadbalancer 视为用于 <> 的选项。隧道似乎从未发生过。我使用浏览器和 curl 进行了测试。
环境信息
- Windows: Windows 11 临
- Docker 在 Windows 上:Docker 桌面版 4.3.2 (72729)
- Kubernetes: v1.22.3
- Minikube: minikube 版本: v1.24.0
命令 - 已执行
这是我创建服务时执行的命令。
1。创建部署
~ kubectl create deployment hello-world3 --image=nginx:mainline-alpine
deployment.apps/hello-world3 created
~ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
hello-world3 1/1 1 1 19s
2。公开出站
~ kubectl expose deployment hello-world3 --type=LoadBalancer --port=8080
service/hello-world3 exposed
~ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-world3 LoadBalancer 10.103.203.156 127.0.0.1 8080:30300/TCP 14s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d8h
3。创建隧道服务
~ minikube service hello-world3
|-----------|--------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|--------------|-------------|---------------------------|
| default | hello-world3 | 8080 | http://192.168.49.2:30300 |
|-----------|--------------|-------------|---------------------------|
* Starting tunnel for service hello-world3.
|-----------|--------------|-------------|------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|--------------|-------------|------------------------|
| default | hello-world3 | | http://127.0.0.1:62864 |
|-----------|--------------|-------------|------------------------|
* Opening service default/hello-world3 in default browser...
! Because you are using a Docker driver on windows, the terminal needs to be open to run it.
我希望在连接到 http://127.0.0.1:8080
时看到“Nginx 欢迎”页面
但它是
This site can’t be reached. The connection was reset.
Try:
Checking the connection
Checking the proxy and the firewall
Running Windows Network Diagnostics
ERR_CONNECTION_RESET
同样发生在:
http://127.0.0.1:62864/
我使用 curl 时的输出
~ curl http://127.0.0.1:8080/* -v
VERBOSE: GET with 0-byte payload
curl : The underlying connection was closed: An unexpected error occurred on a receive.
At line:1 char:1
+ curl http://127.0.0.1:8080/ -v
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
~ curl http://127.0.0.1:62864/ -v
VERBOSE: GET with 0-byte payload
curl : The underlying connection was closed: An unexpected error occurred on a receive.
At line:1 char:1
+ curl http://127.0.0.1:62864/ -v
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
kubectl expose deployment hello-world3 --type=LoadBalancer --port=8080
您可以使用 kubectl get svc hello-world3 -o yaml
检查使用上述命令时发生的情况,并查看端口部分:
ports:
- nodePort: 30514
port:8080
protocol: TCP
targetPort:8080
如您所见,targetPort
已设置为与 port
相同的端口。你可以阅读更多here
Note: A Service can map any incoming port to a targetPort. By default and for convenience, the targetPort is set to the same value as the port field.
您看不到 nginx 页面,因为 targetPort
应该设置为 80
,它默认由 pods 监听,而不是 8080
。
要解决您的问题,您可以将 targetPort
设置为端口 80
,方法是将 --target-port=80
添加到您的命令中,如下所示:
kubectl expose deployment hello-world3 --type=LoadBalancer --port=8080 --target-port=80
在 Windows 机器上使用 Kubernetes 的更方便的选项是在 Settings>Kubernetes
的 Docker 桌面中设置 Enable Kubernetes
选项。集群将自动创建,您将能够在几分钟内在终端或 powershell 中使用 kubectl
命令。如果出现问题,您可以通过单击 Reset Kubernetes Cluster
按钮轻松重置集群,该按钮与您在 Docker 桌面中启用 Kubernetes 时位于同一位置。
我想做什么
尝试在启用了 WSL 2 的 Windows 11 平台上并使用 Powershell,Docker 在 Windows、kubectl 和 minikube。这对于解决我的开发环境至关重要。
会发生什么
根据我在文档和网上找到的任何内容,我将 Loadbalancer 视为用于 <> 的选项。隧道似乎从未发生过。我使用浏览器和 curl 进行了测试。
环境信息
- Windows: Windows 11 临
- Docker 在 Windows 上:Docker 桌面版 4.3.2 (72729)
- Kubernetes: v1.22.3
- Minikube: minikube 版本: v1.24.0
命令 - 已执行
这是我创建服务时执行的命令。
1。创建部署
~ kubectl create deployment hello-world3 --image=nginx:mainline-alpine
deployment.apps/hello-world3 created
~ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
hello-world3 1/1 1 1 19s
2。公开出站
~ kubectl expose deployment hello-world3 --type=LoadBalancer --port=8080
service/hello-world3 exposed
~ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-world3 LoadBalancer 10.103.203.156 127.0.0.1 8080:30300/TCP 14s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d8h
3。创建隧道服务
~ minikube service hello-world3
|-----------|--------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|--------------|-------------|---------------------------|
| default | hello-world3 | 8080 | http://192.168.49.2:30300 |
|-----------|--------------|-------------|---------------------------|
* Starting tunnel for service hello-world3.
|-----------|--------------|-------------|------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|--------------|-------------|------------------------|
| default | hello-world3 | | http://127.0.0.1:62864 |
|-----------|--------------|-------------|------------------------|
* Opening service default/hello-world3 in default browser...
! Because you are using a Docker driver on windows, the terminal needs to be open to run it.
我希望在连接到 http://127.0.0.1:8080
时看到“Nginx 欢迎”页面但它是
This site can’t be reached. The connection was reset.
Try:
Checking the connection
Checking the proxy and the firewall
Running Windows Network Diagnostics
ERR_CONNECTION_RESET
同样发生在: http://127.0.0.1:62864/
我使用 curl 时的输出
~ curl http://127.0.0.1:8080/* -v
VERBOSE: GET with 0-byte payload
curl : The underlying connection was closed: An unexpected error occurred on a receive.
At line:1 char:1
+ curl http://127.0.0.1:8080/ -v
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
~ curl http://127.0.0.1:62864/ -v
VERBOSE: GET with 0-byte payload
curl : The underlying connection was closed: An unexpected error occurred on a receive.
At line:1 char:1
+ curl http://127.0.0.1:62864/ -v
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
kubectl expose deployment hello-world3 --type=LoadBalancer --port=8080
您可以使用 kubectl get svc hello-world3 -o yaml
检查使用上述命令时发生的情况,并查看端口部分:
ports:
- nodePort: 30514
port:8080
protocol: TCP
targetPort:8080
如您所见,targetPort
已设置为与 port
相同的端口。你可以阅读更多here
Note: A Service can map any incoming port to a targetPort. By default and for convenience, the targetPort is set to the same value as the port field.
您看不到 nginx 页面,因为 targetPort
应该设置为 80
,它默认由 pods 监听,而不是 8080
。
要解决您的问题,您可以将 targetPort
设置为端口 80
,方法是将 --target-port=80
添加到您的命令中,如下所示:
kubectl expose deployment hello-world3 --type=LoadBalancer --port=8080 --target-port=80
在 Windows 机器上使用 Kubernetes 的更方便的选项是在 Settings>Kubernetes
的 Docker 桌面中设置 Enable Kubernetes
选项。集群将自动创建,您将能够在几分钟内在终端或 powershell 中使用 kubectl
命令。如果出现问题,您可以通过单击 Reset Kubernetes Cluster
按钮轻松重置集群,该按钮与您在 Docker 桌面中启用 Kubernetes 时位于同一位置。