Jam*_*ock 1 kubernetes kubernetes-ingress docker-desktop
我正在尝试做一件我认为很简单的事情。我需要在 docker 桌面的 k8s 环境中收听https://localhost:44301、https://localhost:5002、https://localhost:5003,并使用我的 pfx 文件/密码进行代理指定并通过端口将其转发到侦听特定地址的 Pod(可能是端口 80,无所谓)
该文档令人麻木地复杂,因为它看起来应该是直截了当的。我可以让 pod 运行,我可以使用 kubectl port-forward 并且它们工作正常,但是我无法弄清楚如何以有意义的方式使用 ha-proxy 或 nginx 或其他任何东西来使用 ingress。
有人可以做一个 ELI5 告诉我如何打开它吗?我在 Windows 10 2004 上使用 WSL2 和 Docker 实验性,所以我应该可以访问他们在文档中引用的入口内容,并把它说清楚。
谢谢!
正如评论中所讨论的,这是一个社区维基答案:
我已经成功地在 Windows 中的 Docker 上的 Kubernetes 中创建了 Ingress 资源。
重现步骤:
从具有管理员访问权限的 Powershell 运行以下命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
系统可能会要求您重新启动机器。
使用所有默认选项安装 Docker 应用程序并启用 Kubernetes
安装kubectl。
运行此命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
Run Code Online (Sandbox Code Playgroud)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud-generic.yaml
Run Code Online (Sandbox Code Playgroud)
重新启动您的机器。从cmd以管理员身份运行的提示中,执行:
net stop http
停止列出的服务使用services.msc
使用:netstat -a -n -o -b并检查侦听端口 80 的其他进程。
下面是使用 pod 进行简单部署,这些 pod 将回复请求:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
Run Code Online (Sandbox Code Playgroud)
通过运行命令应用它:
$ kubectl apply -f file_name.yaml
为了让 Pod 能够与它们通信,您需要创建一个服务。
下面的例子:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud-generic.yaml
Run Code Online (Sandbox Code Playgroud)
通过运行命令应用此服务定义:
$ kubectl apply -f file_name.yaml
下面是使用上面创建的服务的简单 Ingress 资源:
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"
Run Code Online (Sandbox Code Playgroud)
看一眼:
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
Run Code Online (Sandbox Code Playgroud)
hello-test.internal将用作hostname连接到您的 Pod。
通过调用命令应用您的 Ingress 资源:
$ kubectl apply -f file_name.yaml
我找到了这个Github 链接,它允许您通过hostname.
为此,127.0.0.1 hello-test.internal在C:\Windows\System32\drivers\etc\hosts文件中添加一行并保存。您将需要管理员权限才能执行此操作。
编辑:最新版本的 Docker Desktop for Windows 已经添加了一个 hosts 文件条目:
127.0.0.1 kubernetes.docker.internal
调用命令显示Ingress资源信息:
kubectl get ingress
它应该显示:
NAME HOSTS ADDRESS PORTS AGE
hello-ingress hello-test.internal localhost 80 6m2s
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过打开 Web 浏览器并键入来访问您的 Ingress 资源
http://kubernetes.docker.internal/
浏览器应该输出:
Hello, world!
Version: 2.0.0
Hostname: hello-84d554cbdf-2lr76
Run Code Online (Sandbox Code Playgroud)
Hostname: hello-84d554cbdf-2lr76 是响应的 pod 的名称。
:如果此解决方案不工作与命令请检查连接
netstat -a -n -o
(使用管理员权限,如果事情没有使用端口80)。
| 归档时间: |
|
| 查看次数: |
1345 次 |
| 最近记录: |