使用WLS2在Docker桌面上启用入口控制器
目前,我正在使用Docker Desktop与WSL2集成。我发现Docker Desktop自动为我创建了一个集群。这意味着我不必安装并使用Minikube或Kind来创建集群。 问题是,如果我使用Docker Desktop中的“内置”群集,如何启用Ingress Controller? 我试图创建一个入口来检查这是否有效,但据我猜测,它不起作用 我创建的YAML文件如下所示:使用WLS2在Docker桌面上启用入口控制器,docker,kubernetes,windows-subsystem-for-linux,wsl-2,Docker,Kubernetes,Windows Subsystem For Linux,Wsl 2,目前,我正在使用Docker Desktop与WSL2集成。我发现Docker Desktop自动为我创建了一个集群。这意味着我不必安装并使用Minikube或Kind来创建集群。 问题是,如果我使用Docker Desktop中的“内置”群集,如何启用Ingress Controller? 我试图创建一个入口来检查这是否有效,但据我猜测,它不起作用 我创建的YAML文件如下所示: apiVersion: apps/v1 kind: Deployment metadata: name: we
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
minReadySeconds: 30
selector:
matchLabels:
app: webapp
replicas: 1
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: nodejs-helloworld:v1
---
apiVersion: v1
kind: Service
metadata:
name: webapp-service
spec:
selector:
app: webapp
ports:
- name: http
port: 3000
nodePort: 30090 # only for NotPort > 30,000
type: NodePort #ClusterIP inside cluster
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webapp-ingress
spec:
defaultBackend:
service:
name: webapp-service
port:
number: 3000
rules:
- host: ingress.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webapp-service
port:
number: 3000
我试图访问ingress.local/但未成功。(我在主机文件中将ingress.local添加到127.0.0.1,并且webapp在kubernetes.docker.internal:30090上运行良好)
你能帮我了解一下根本原因吗?
谢谢。最新版本的Docker Desktop for Windows已经添加了一个主机文件条目:
127.0.0.1 kubernetes.Docker.internal
如果要指向127.0.0.1
,则必须在入口定义中将URL用作主机名。这应该在本页的文档中,但没有Docker Desktop for Windows部分。
您的文件应如下所示:
apiVersion: v1
kind: Service
metadata:
name: webapp-service
spec:
type: NodePort
selector:
app: webapp
ports:
- name: http
protocol: TCP
port: 3000
nodePort: 30090
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: webapp-ingress
spec:
rules:
- host: kubernetes.docker.internal
http:
paths:
- path: /
backend:
serviceName: webapp-service
servicePort: http
您的入口文件应如下所示:
apiVersion: v1
kind: Service
metadata:
name: webapp-service
spec:
type: NodePort
selector:
app: webapp
ports:
- name: http
protocol: TCP
port: 3000
nodePort: 30090
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: webapp-ingress
spec:
rules:
- host: kubernetes.docker.internal
http:
paths:
- path: /
backend:
serviceName: webapp-service
servicePort: http
然后您可以使用http://kubernetes.docker.internal/
您可以在这里看到的示例:。最终我找到了修复的方法。我必须通过命令部署ingress Nginx:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/cloud/deploy.yaml
(按照处的说明进行操作。对于Docker for Windows,它工作正常)
现在我可以成功访问。您必须在集群上安装一个ingress nginx控制器,这样您的节点将有一个打开的端口80/443 使用
helm
(v3-请参阅):
helm安装——名称空间kube系统nginx入口nginx——repohttps://kubernetes.github.io/ingress-nginx
使用kubectl(请参阅):
kubectl应用-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/cloud/deploy.yaml
然后手动将入口主机名添加到/etc/hosts
:
127.0.0.1 ingress.local
127.0.0.1 my.other.service.local
# ...
然后,如果您提出以下请求:
- DNS解析将路由到您的群集节点
- 然后入口控制器将在端口80上为请求提供服务
- 然后入口将请求路由到已配置的后端服务
- 服务将路由到一个可用的吊舱
验证webhookconfiguration
问题的疑难解答,另请参阅