我創建了 aks 集群,其中包含使用 Ingress 控制器公開的 2 個服務
下面是帶有 TLS 的入口控制器的 yml 檔案
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: xyz-office-ingress02
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
cert-manager.io/cluster-issuer: letsencrypt
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- office01.xyz.com
secretName: tls-office-secret
rules:
- host: office01.xyz.com
- http:
paths:
- path: /(/|$)(.*)
pathType: Prefix
backend:
service:
name: office-webapp
port:
number: 80
- path: /api/
pathType: Prefix
backend:
service:
name: xyz-office-api
port:
number: 80
kubenctl 描述
Name: xyz-office-ingress02
Labels: <none>
Namespace: default
Address: <EXTERNAL Public IP>
Ingress Class: <none>
Default backend: <default>
TLS:
tls-office-secret terminates office01.xyz.com
Rules:
Host Path Backends
---- ---- --------
*
/(/|$)(.*) office-webapp:80 (10.244.1.18:80,10.244.2.16:80)
/api/ xyz-office-api:80 (10.244.0.14:8000,10.244.1.19:8000)
Annotations: cert-manager.io/cluster-issuer: letsencrypt
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/use-regex: true
Events: <none>
在 IP 上,我可以訪問這兩種服務,但是在使用 DNS 時它無法正常作業并出現 404 錯誤
uj5u.com熱心網友回復:
清理評論中的評論:基本上,問題在于入口規則定義。我們有以下內容:
rules:
- host: office01.xyz.com
- http:
paths:
...
我們知道直接連接到入口確實有效,無需使用 DNS。當通過 DNS 查詢時:我們得到一個 404。
這個 404 的原因是,當使用 DNS 名稱輸入時,您輸入了第一條規則。您沒有在其中定義任何后端。
解決此問題的一種方法是使用您的 http 規則重新定位該入口的“主機”部分,例如:
spec:
tls:
...
rules:
- host: office01.xyz.com
http: #no "-", not a new entry => http & host belong to a single rule
paths:
- path: /(/|$)(.*)
...
- path: /api/
...
uj5u.com熱心網友回復:
我試圖在我的環境中重現相同的問題并得到以下結果
我已經為集群創建了 dns 區域

創建了命名空間
kubectl create namespace ingress-basic

我已經安裝了 helm repo 并使用 helm 部署了入口控制器
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace <namespace-name> \
--set controller.replicaCount=2

當我簽入日志時,我可以看到帶有負載均衡器的公共 IP

我創建了一些角色分配來連接 DNS 區域

將集群節點池 DNS 參與者權限的托管標識分配給域區域
az role assignment create --assignee $UserClientId --role 'DNS Zone Contributor' --scope $DNSID
我已經運行了一些 helm 命令來部署 dns 區域
helm install external-dns bitnami/external-dns --namespace ingress-basic --set provider=azure --set txtOwnerId=<cluster-name> --set policy=sync --set azure.resourceGroup=<rg-name> --set azure.tenantId=<tenant-id> --set azure.subscriptionId=<sub-id> --set azure.useManagedIdentityExtension=true --set azure.userAssignedIdentityID=<UserClient-Id>

我已經使用 helm 安裝了證書管理器
helm install cert-manager jetstack/cert-manager \
--namespace ingress-basic \
--version vXXXX
我已經創建并運行了應用程式
vi nginxfile.yaml
kubectl apply -f file.yaml
我已經創建了入口路由,它將配置到應用程式的流量 之后我們必須驗證它將創建或不創建的證書并等待幾分鐘它將更新 DNS 區域
我已經創建了證書管理器并部署了該集群
kubectl apply -f file.yaml --namespace ingress-basic
請找到此網址以供參考以獲取更多詳細資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/523596.html
