我想在kubernetes中运行ASP.NET应用程序,特别是我的本地minikube示例。
1.我创建了Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
EXPOSE 80
EXPOSE 443
# omitted
FROM base AS final
# omited
ENTRYPOINT [ "dotnet", "Application.dll", "--urls http://0.0.0.0:80;https://0.0.0.0:443" ]
字符串
1.我正在使用Windows和PowerShell,所以我将docker重定向到我的minikube的docker:
& minikube -p minikube docker-env --shell powershell | Invoke-Expression
型
1.我创建了secret/configMap/deployment/service yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: identities-deployment
labels:
app: identities
spec:
replicas: 1
selector:
matchLabels:
app: identities
template:
metadata:
labels:
app: identities
spec:
containers:
- name: identities
image: identities-service:latest
imagePullPolicy: Never
ports:
- containerPort: 80
- containerPort: 443
---
apiVersion: v1
kind: Service
metadata:
name: identities-service
spec:
type: NodePort
selector:
app: identities
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30001
name: http
- protocol: TCP
port: 443
targetPort: 443
nodePort: 30002
name: https
型
1.我通过运行minikube ip
获得minikube的IP。返回192.168.49.2
1.我向192.168.49.2:30001
发送了一个http请求来检查应用程序的健康状况(应该返回200),但是它超时了。
1.我在应用程序的容器中获得一个shell,并确保可以从localhost:80
处的应用程序获得响应(它返回200,所以没关系)
kubectl exec --stdin --tty identities-deployment-d794d7866-6bnhn -- /bin/bash
curl localhost:80
型
1.我在minikube的容器中获取一个shell,并确保我可以从localhost:30001
处的应用程序获得响应(它返回200,所以没关系)
docker exec -it 46cca50fc3b3 sh
curl localhost:30001
型
1.我运行minikube service identities-service --url
并得到:
http://127.0.0.1:51504
http://127.0.0.1:51505
❗ Because you are using a Docker driver on windows, the terminal needs to be open to run it.
型
1.我向localhost:51504
发送请求,它返回200(成功)
我的问题是,在第5步,为什么它超时了,如何解决它?我希望我的应用程序暴露在端口30001
,我不确定51504
是从哪里来的。顺便说一句,如果我运行docker ps -a
(使用我的本地Docker,而不是minikubes),我会得到:
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS
NAMES
46cca50fc3b3 gcr.io/k8s-minikube/kicbase:v0.0.39 "/usr/local/bin/entr…" 55 minutes ago Up 55 minutes
127.0.0.1:58799->22/tcp, 127.0.0.1:58800->2376/tcp, 127.0.0.1:58802->5000/tcp, 127.0.0.1:58803->8443/tcp, 127.0.0.1:58801->32443/tcp minikube
型
我不希望端口30001被Map到minikube的容器中,因为我通过minikube的ip访问我的应用程序,但我越想越觉得端口30001和30002被Map到minikube的容器中与我的本地机器,而不仅仅是在k8s集群中。这是解决办法吗?如果是这样,我如何Map这些端口?我只运行了minikube start
2条答案
按热度按时间oxf4rvwz1#
使用NodePort公开的服务应该可以在
minikube_IP:NodePort
上访问,在您的示例中是192.168.49.2:30001
,但由于服务在主机上的端口51504
和51505
上公开,因此它超时了。你可以通过在minikube中使用tunnel来实现:
字符串
这提供了访问应用所需的外部IP地址。
有关更多信息,请点击此official doc。
goucqfw62#
我发现通过运行
kubectl port-forward svc/identities-service 30001:80
,我得到了在端口30001应答请求的服务。但我需要打开终端。kubectl有办法推断出这一点吗?