我正在嘗試在 nginx 入口公開的命名空間 example-ns 中設定 kuard 演示應用程式。
在默認命名空間中公開它是可行的,但是當我在命名空間 example-ns 中公開它時,我得到:
```503 Service Temporarily Unavailable```
這些是我用于 kuard 的服務、部署和入口 yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: kuard
namespace: example-ns
spec:
selector:
matchLabels:
app: kuard
replicas: 1
template:
metadata:
labels:
app: kuard
spec:
containers:
- image: gcr.io/kuar-demo/kuard-amd64:1
imagePullPolicy: Always
name: kuard
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: kuard
namespace: example-ns
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
selector:
app: kuard
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kuard
namespace: example-ns
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: htpasswd
nginx.ingress.kubernetes.io/auth-realm: "Enter your credentials"
spec:
tls:
- hosts:
- example.mydomain.dev
secretName: quickstart-example-tls
rules:
- host: example.mydomain.dev
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kuard
port:
number: 80
如您所見,所有內容都在同一個命名空間中,并在以下內容中描述了入口結果:
? kubectl describe ingress kuard -n example-ns
Name: kuard
Labels: <none>
Namespace: example-ns
Address: 192.168.69.1
Ingress Class: <none>
Default backend: <default>
TLS:
quickstart-example-tls terminates example.mydomain.dev
Rules:
Host Path Backends
---- ---- --------
example.mydomain.dev
/ kuard:80 (10.69.58.226:8080)
Annotations: cert-manager.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/auth-realm: Enter your credentials
nginx.ingress.kubernetes.io/auth-secret: htpasswd
nginx.ingress.kubernetes.io/auth-type: basic
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreateCertificate 28m cert-manager-ingress-shim Successfully created Certificate "quickstart-example-tls"
Normal Sync 27m (x2 over 28m) nginx-ingress-controller Scheduled for sync
Normal Sync 27m (x2 over 28m) nginx-ingress-controller Scheduled for sync
我也讀過類似的問題,但這個解決方案不能像這里看到的那樣作業。
有人知道這里有什么問題嗎?
提前致謝!
解決方案:
我檢查了入口控制器的日志,發現 auth secret 在默認命名空間中。這就是為什么只能訪問默認命名空間中的 pod。將秘密移動到正確的名稱空間中解決了這個問題!
uj5u.com熱心網友回復:
首先,您不應該再使用注釋kubernetes.io/ingress.class,因為它已被棄用。而是使用.spec.ingressClassName來參考您想要的 Ingress Controller:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-myservicea
spec:
ingressClassName: nginx
rules:
...
看起來你想要的命名空間中的入口似乎無法與控制器同步,所以如果你的example-ns和你的控制器所在的命名空間中有任何 Netpols;備份它們并洗掉它們,以確保連接沒有被阻止。
接下來,您應該檢查 Ingress Controller 本身的日志,如果連接到達它;您肯定會在日志中看到 Ingress 資源不起作用的原因。共享 Ingress Controller 的配置也會很有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521401.html
標籤:nginxKubernetesKubernetes入口nginx入口
