Docker Desktop + k8s plus https 在部署中将多个外部端口代理到 http 上的 pods?
Docker Desktop + k8s plus https proxy multiple external ports to pods on http in deployment?
我正在尝试做一件我认为很简单的事情。我需要在 docker 桌面的 k8s 环境中收听 https://localhost:44301, https://localhost:5002, https://localhost:5003,并使用我指定的 pfx file/password 进行代理,并通过端口将其转发到 [=25] =] 侦听特定地址(可以是端口 80,无关紧要)
文档看起来非常复杂,看起来应该是直截了当的。我可以获得 pods 运行,我可以使用 kubectl port-forward 并且它们工作正常,但我无法弄清楚如何使用 ha-proxy 或 nginx 或其他任何东西进入有意义的方式。
谁能做一个 ELI5 告诉我如何打开它?我在 Windows 10 2004 上使用 WSL2 和 Docker 实验,所以我应该可以访问他们在文档中引用的入口内容,并弄清楚。
谢谢!
正如评论中所讨论的,这是一个社区维基答案:
我已经在 Windows 的 Docker 上成功地在 Kubernetes 中创建了 Ingress 资源。
重现步骤:
- 启用 Hyper-V
- 为 Windows 安装 Docker 并启用 Kubernetes
- 连接 kubectl
- 启用入口
- 创建部署
- 创建服务
- 创建入口资源
- 将主机添加到本地主机文件
- 测试
启用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.yaml
kubectl 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 的其他进程。
创建部署
下面是使用 pods 的简单部署,它将回复请求:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
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"
通过运行ning命令应用它:
$ kubectl apply -f file_name.yaml
创建服务
为了 pods 能够让您与他们沟通,您需要创建一个服务。
示例如下:
apiVersion: v1
kind: Service
metadata:
name: hello-service
spec:
type: NodePort
selector:
app: hello
version: 2.0.0
ports:
- name: http
protocol: TCP
port: 80
targetPort: 50001
通过 运行ning 命令应用此服务定义:
$ kubectl apply -f file_name.yaml
创建 Ingress 资源
下面是使用上面创建的服务的简单 Ingress 资源:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-ingress
spec:
rules:
- host: kubernetes.docker.internal
http:
paths:
- path: /
backend:
serviceName: hello-service
servicePort: http
看看:
spec:
rules:
- host: hello-test.internal
hello-test.internal
将用作 hostname
连接到您的 pods。
通过调用命令应用您的 Ingress 资源:
$ kubectl apply -f file_name.yaml
将主机添加到本地主机文件
我发现这个 Github link 可以让您通过 hostname
连接到您的 Ingress 资源。
要实现这一点,请在 C:\Windows\System32\drivers\etc\hosts
文件中添加一行 127.0.0.1 hello-test.internal
并保存。
您将需要管理员权限才能执行此操作。
编辑: Windows 的最新版本 Docker Desktop 已经添加了一个主机文件条目:
127.0.0.1 kubernetes.docker.internal
测试
调用命令显示Ingress资源信息:
kubectl get ingress
它应该显示:
NAME HOSTS ADDRESS PORTS AGE
hello-ingress hello-test.internal localhost 80 6m2s
现在您可以通过打开网络浏览器并输入
来访问您的 Ingress 资源
http://kubernetes.docker.internal/
浏览器应该输出:
Hello, world!
Version: 2.0.0
Hostname: hello-84d554cbdf-2lr76
Hostname: hello-84d554cbdf-2lr76
是回复的 pod 的名称。
如果此解决方案不起作用,请使用以下命令检查连接:
netstat -a -n -o
(具有管理员权限)如果某些东西未使用端口 80。
我正在尝试做一件我认为很简单的事情。我需要在 docker 桌面的 k8s 环境中收听 https://localhost:44301, https://localhost:5002, https://localhost:5003,并使用我指定的 pfx file/password 进行代理,并通过端口将其转发到 [=25] =] 侦听特定地址(可以是端口 80,无关紧要)
文档看起来非常复杂,看起来应该是直截了当的。我可以获得 pods 运行,我可以使用 kubectl port-forward 并且它们工作正常,但我无法弄清楚如何使用 ha-proxy 或 nginx 或其他任何东西进入有意义的方式。
谁能做一个 ELI5 告诉我如何打开它?我在 Windows 10 2004 上使用 WSL2 和 Docker 实验,所以我应该可以访问他们在文档中引用的入口内容,并弄清楚。
谢谢!
正如评论中所讨论的,这是一个社区维基答案:
我已经在 Windows 的 Docker 上成功地在 Kubernetes 中创建了 Ingress 资源。
重现步骤:
- 启用 Hyper-V
- 为 Windows 安装 Docker 并启用 Kubernetes
- 连接 kubectl
- 启用入口
- 创建部署
- 创建服务
- 创建入口资源
- 将主机添加到本地主机文件
- 测试
启用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.yaml
kubectl 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 的其他进程。
创建部署
下面是使用 pods 的简单部署,它将回复请求:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
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"
通过运行ning命令应用它:
$ kubectl apply -f file_name.yaml
创建服务
为了 pods 能够让您与他们沟通,您需要创建一个服务。
示例如下:
apiVersion: v1
kind: Service
metadata:
name: hello-service
spec:
type: NodePort
selector:
app: hello
version: 2.0.0
ports:
- name: http
protocol: TCP
port: 80
targetPort: 50001
通过 运行ning 命令应用此服务定义:
$ kubectl apply -f file_name.yaml
创建 Ingress 资源
下面是使用上面创建的服务的简单 Ingress 资源:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-ingress
spec:
rules:
- host: kubernetes.docker.internal
http:
paths:
- path: /
backend:
serviceName: hello-service
servicePort: http
看看:
spec:
rules:
- host: hello-test.internal
hello-test.internal
将用作 hostname
连接到您的 pods。
通过调用命令应用您的 Ingress 资源:
$ kubectl apply -f file_name.yaml
将主机添加到本地主机文件
我发现这个 Github link 可以让您通过 hostname
连接到您的 Ingress 资源。
要实现这一点,请在 C:\Windows\System32\drivers\etc\hosts
文件中添加一行 127.0.0.1 hello-test.internal
并保存。
您将需要管理员权限才能执行此操作。
编辑: Windows 的最新版本 Docker Desktop 已经添加了一个主机文件条目:
127.0.0.1 kubernetes.docker.internal
测试
调用命令显示Ingress资源信息:
kubectl get ingress
它应该显示:
NAME HOSTS ADDRESS PORTS AGE
hello-ingress hello-test.internal localhost 80 6m2s
现在您可以通过打开网络浏览器并输入
来访问您的 Ingress 资源http://kubernetes.docker.internal/
浏览器应该输出:
Hello, world!
Version: 2.0.0
Hostname: hello-84d554cbdf-2lr76
Hostname: hello-84d554cbdf-2lr76
是回复的 pod 的名称。
如果此解决方案不起作用,请使用以下命令检查连接:
netstat -a -n -o
(具有管理员权限)如果某些东西未使用端口 80。