我使用 docker-desktop使用此鏈接創建了一個 nginx 入口。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml
我的服務:
apiVersion: apps/v1
kind: Deployment
metadata:
name: be-assinaturas
namespace: apps-space
labels:
tier: backend
app: assinaturas
spec:
selector:
matchLabels:
name: be-assinaturas
app: assinaturas
strategy:
type: Recreate
replicas: 2
template:
metadata:
name: be-assinaturas
labels:
app: assinaturas
name: be-assinaturas
spec:
containers:
- name: be-assinaturas
image: jedi31/assinaturas:latest
imagePullPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
name: svc-assinaturas
namespace: apps-space
spec:
selector:
name: be-assinaturas
app: assinaturas
type: ClusterIP
ports:
- name: be-assinaturas-http
port: 80
targetPort: 80
我的入口資源定義為:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-be-assinaturas
namespace: apps-space
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- path: /assinaturas
pathType: Prefix
backend:
service:
name: svc-assinaturas
port:
number: 80
運行一個kubectl get services --all-namespaces我得到
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apps-space svc-assinaturas ClusterIP 10.107.188.28 <none> 80/TCP 12m
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 66d
ingress-nginx ingress-nginx-controller LoadBalancer 10.102.238.173 localhost 80:32028/TCP,443:30397/TCP 5h45m
ingress-nginx ingress-nginx-controller-admission ClusterIP 10.98.148.190 <none> 443/TCP 5h45m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 66d
如果我對服務進行埠轉發,如下所示:
kubectl port-forward -n apps-space service/svc-assinaturas 5274:80
我可以使用 curl 訪問我的應用程式,如下所示:
curl -v http://localhost:5274/hc/alive
回應是:
* Trying 127.0.0.1:5274...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 5274 (#0)
> GET /hc/alive HTTP/1.1
> Host: localhost:5274
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
< Date: Mon, 06 Dec 2021 23:22:40 GMT
< Server: Kestrel
< Transfer-Encoding: chunked
<
* Connection #0 to host localhost left intact
{"service":"Catalogo","status":"Alive","version":"bab4653"}
但是,如果我嘗試使用 Ingress 訪問該服務,它會回傳 404。
curl -v http://localhost/assinaturas/hc/alive
* Trying 127.0.0.1:80...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /assinaturas/hc/alive HTTP/1.1
> Host: localhost
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Date: Mon, 06 Dec 2021 23:22:51 GMT
< Content-Length: 0
< Connection: keep-alive
<
* Connection #0 to host localhost left intact
我在這里做錯了什么?為什么我可以訪問該服務,但入口找不到它?
uj5u.com熱心網友回復:
這是因為/assinaturasNginx重寫需要省略前綴.. 這就是為什么你得到 404(未找到)的原因:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-be-assinaturas
namespace: apps-space
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /$1 # <- ?? rewrite here
spec:
rules:
- http:
paths:
- path: /assinaturas/(.*) # <-- ?? Match the path to be rewritten
pathType: Prefix
backend:
service:
name: svc-assinaturas
port:
number: 80
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/376064.html
標籤:码头工人 nginx Kubernetes
