gpt4 book ai didi

kubernetes - 如何向本地计算机公开入口? (Windows 上的 minikube)

转载 作者:行者123 更新时间:2023-12-02 11:36:46 27 4
gpt4 key购买 nike

我有两个部署

部署 1

apiVersion: v1
kind: Service
metadata:
name: first-service
spec:
selector:
key: app1
ports:
- port: 81
targetPort: 5050

---

apiVersion: apps/v1
kind: Deployment
metadata:
name: first-deployment
spec:
replicas: 1
selector:
matchLabels:
run: app1
template:
metadata:
labels:
run: app1
spec:
containers:
- name: ocr
image: ocr_app
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5050

部署 2
apiVersion: v1
kind: Service
metadata:
name: second-service
spec:
selector:
key: app2
ports:
- port: 82
targetPort: 5000

---

apiVersion: apps/v1
kind: Deployment
metadata:
name: second-deployment
spec:
replicas: 1
selector:
matchLabels:
run: app2
template:
metadata:
labels:
run: app2
spec:
containers:
- name: ner
image: ner_app
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5000

在 minikube 上启用入口后,我应用了 ingess
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: demo.local
http:
paths:
- path: /ocr
backend:
serviceName: first-service
servicePort: 81
- path: /ner
backend:
serviceName: second-service
servicePort: 82

在我的主机文件中,我有
192.168.177.71  demo.local

在哪里 192.168.177.71是我现在的 minikube ip

然后我运行了这个命令
kubectl port-forward nginx-ingress-controller-6fc5bcc8c9-p6mvj 3000:80 --namespace kube-system

在控制台中是输出
Forwarding from 127.0.0.1:3000 -> 80
Forwarding from [::1]:3000 -> 80

但是当我向 demo.local:3000/ocr 提出请求时使用 postman 没有回应

Could not get any response There was an error connecting to demo.local:3000.



编辑:使用 minikube service first-service给出这个输出
PS D:\docker> minikube service first-service
|-----------|---------------|-------------|--------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|---------------|-------------|--------------|
| default | first-service | | No node port |
|-----------|---------------|-------------|--------------|
* service default/first-service has no node port

最佳答案

@erotavlas 作为 Mafor 提供的答案,可以帮助您解决问题,请接受他的回答。

我正在发布可能对其他人有帮助的扩展答案。

此问题的根本原因是 selector/labels .

first-service , spec.selector设置为 key: app1 ,但是在部署 spec.selector.matchLabels设置为 run: app1 .

要正常工作,您需要具有相同的选择器。因此,您需要将服务 spec.selector 更改为 run: app1或更改部署 spec.selector.matchLabelskey: app1 .与 second-service 的情况相同和 second-deployment .更多详情可查看here .

我尝试基于 official docs 在 Minikube 上使用 Ingress和你的 YAML。

另外,使用 IngressMinikube , Ingress addon必须启用。

$ minikube addons list | grep ingress
- ingress: disabled

如果它被禁用,您必须启用它。
$ minikube addons enable ingress
✅ ingress was successfully enabled
targetPort:是容器接受流量的端口/应用程序在 pod 内运行的端口 port:是抽象的 Service端口,可以是其他 pod 用于访问服务的任何端口。

OP 使用了自己的镜像,其中应用程序在端口 5050 上运行和 5000 ,对于这个例子,我将在端口 8080 上使用 GCP hello world .标签/matchLabels 已更改为在部署和服务中具有 sam 值。

首次服务
apiVersion: v1
kind: Service
metadata:
name: first-service
spec:
selector:
key: app1
ports:
- port: 81
targetPort: 8080

---

apiVersion: apps/v1
kind: Deployment
metadata:
name: first-deployment
spec:
replicas: 1
selector:
matchLabels:
key: app1
template:
metadata:
labels:
key: app1
spec:
containers:
- name: hello1
image: gcr.io/google-samples/hello-app:1.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080

service/first-service created
deployment.apps/first-deployment created

二次服务
apiVersion: v1
kind: Service
metadata:
name: second-service
spec:
selector:
key: app2
ports:
- port: 82
targetPort: 8080

---

apiVersion: apps/v1
kind: Deployment
metadata:
name: second-deployment
spec:
replicas: 1
selector:
matchLabels:
key: app2
template:
metadata:
labels:
key: app2
spec:
containers:
- name: hello2
image: gcr.io/google-samples/hello-app:2.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080

service/second-service created
deployment.apps/second-deployment created

它将服务装箱为 ClusterIP类型。如果需要可以使用 NodePort但这不是必需的。

申请入口

所提供的入口足以进行测试。

official docs 中所述.您应该将 minikube ip 添加到主机文件。

Note: If you are running Minikube locally, use minikube ip to get the external IP. The IP address displayed within the ingress list will be the internal IP.



在 Ubuntu 操作系统中是 /etc/hosts (需要使用 sudo 来编辑)。在 Windows 操作系统中,请查看 this article

对于我的集群(使用 GCE):
$ minikube ip
10.132.15.208

添加到 hosts文件值(value):

10.132.15.208 demo.local



以下回复。
$ curl demo.local/ocr
Hello, world!
Version: 1.0.0
Hostname: first-deployment-85b75bf4f9-qlzrp
$ curl demo.local/ner
Hello, world!
Version: 2.0.0
Hostname: second-deployment-5b5bbb7f4-9sbqr

但是,带有 rewrite 的版本Mafor 提供的功能更多。

此外,您还可以考虑使用 LoadBalancerMinikube .
更多信息请访问 Minikube docs .

关于kubernetes - 如何向本地计算机公开入口? (Windows 上的 minikube),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59994578/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com