我已经设法在Windows的Docker上的Kubernetes中创建Ingress资源。
重现步骤 :
- 启用Hyper-V
- 安装适用于Windows的Docker并启用Kubernetes
- 连接kubectl
- 启用入口
- 创建部署
- 建立服务
- 创建入口资源
- 将主机添加到本地主机文件
- 测试
启用[Hyper-V](https://docs.microsoft.com/pl-pl/virtualization/hyper-v-on-
windows/quick-start/enable-hyper-v)
在具有管理员访问权限的Powershell中,运行以下命令:
Enable-WindowsOptionalFeature -online -FeatureName Microsoft-Hyper-V -All
系统可能会要求您重新启动计算机。
安装适用于Windows的Docker并启用Kubernetes
使用所有默认选项安装Docker应用程序并启用Kubernetes
连接kubectl
安装kubectl。
启用入口
运行以下命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud-generic.yaml
编辑: 确保没有其他服务正在使用端口80
重新启动机器。在
cmd以管理员身份运行的提示下,执行以下操作:使用
net stop http停止列出的服务
services.msc
使用:
netstat -a -n -o -b检查端口80上侦听的其他进程。
创建部署
以下是具有可响应请求的Pod的简单部署:
apiVersion: apps/v1kind: Deploymentmetadata: name: hellospec: selector: matchLabels: app: hello version: 2.0.0 replicas: 3 template: metadata: labels: app: hello version: 2.0.0 spec: containers: - name: hello image: "gcr.io/google-samples/hello-app:2.0" env: - name: "PORT" value: "50001"
通过运行命令应用它:
$ kubectl apply -f file_name.yaml
建立服务
为了使Pod能够与您进行通信,您需要创建服务。
下面的例子:
apiVersion: v1kind: Servicemetadata: name: hello-servicespec: type: NodePort selector: app: hello version: 2.0.0 ports: - name: http protocol: TCP port: 80 targetPort: 50001
通过运行以下命令来应用此服务定义:
$ kubectl apply -f file_name.yaml
创建入口资源
以下是使用上面创建的服务的简单Ingress资源:
apiVersion: extensions/v1beta1kind: Ingressmetadata: name: hello-ingress spec: rules: - host: kubernetes.docker.internal http: paths: - path: / backend: serviceName: hello-serviceservicePort: http
看一眼:
spec: rules: - host: hello-test.internal
hello-test.internal将用作
hostname连接到您的广告连播。
通过调用命令来应用您的Ingress资源:
$ kubectl apply -f file_name.yaml
将主机添加到本地主机文件
我找到了这个Github链接,该链接可让您通过连接到Ingress资源
hostname。
为此,
127.0.0.1 hello-test.internal请在
C:WindowsSystem32driversetchosts文件中添加一行并保存。您将需要管理员权限才能执行此操作。
编辑: Windows的最新版本的Docker桌面已经添加了一个主机文件条目:
127.0.0.1kubernetes.docker.internal
测试
通过调用命令显示有关Ingress资源的信息:
kubectl get ingress
它应该显示:
NAME HOSTS ADDRESS PORTS AGEhello-ingress hello-test.internal localhost 80 6m2s
现在,您可以打开网络浏览器并输入以下内容来访问Ingress资源
http://kubernetes.docker.internal/
浏览器应输出:
Hello, world!Version: 2.0.0Hostname: hello-84d554cbdf-2lr76
Hostname: hello-84d554cbdf-2lr76是所回复的广告连播的名称。
:如果此解决方案不工作与命令请检查连接
netstat -a -n -o( 使用管理员权限 ,如果事情没有使用端口80)。



