我有一个 private
AKS 集群,并且我正在使用 nginx 入口 Controller 。到目前为止,我已经完成了以下工作。
- 安装 nginx 入口 Controller
NAMESPACE=jananath-test
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx --namespace $NAMESPACE --create-namespace
- 使用入口资源创建简单部署
apiVersion: v1
kind: Pod
metadata:
name: nginx-test
labels:
app: nginx-test
spec:
containers:
- name: nginx-test-image
image: nginx:1.14.2
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-test
spec:
selector:
app: nginx-test
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
# annotations:
# nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
ingressClassName: nginx
rules:
- host: jananath.test
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-test
port:
number: 80
以上将导致自动创建 Azure 负载均衡器。
部署后,我还可以成功看到如下的 EXTERNAL-IP(下面给出了一个用于隐藏我的实际 IP 的假 IP)
# kubectl get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
minimal-ingress nginx jananath.test 20.6.21.123 80 6m58s
- 由于我还没有域,因此我将
jananath.test
添加到我的/etc/hosts
条目中,如下所示:
20.6.21.123 jananath.test
但问题是当我尝试使用 http://jananath.test
/https://jananath.test
访问部署时(可能 https 不会工作,因为我没有指定任何证书。
但我无法访问,浏览器一直在旋转,如您所知。
有人可以帮我解决发生的问题吗?
入口 Controller 日志似乎也很好,因为我没有看到任何错误。
这是因为我使用的是私有(private)集群吗?或者由入口创建的负载均衡器驻留在由 AKS 群集创建的资源组之一(部署时)并且不知何故无法从 Internet 进行访问?
非常感谢:)
最佳答案
我尝试在公共(public) AKS 集群和私有(private) AKS 集群中重现此问题。我成功地能够在两个集群中使用 nginx-ingress 服务浏览应用程序。
以下是在私有(private) AKS 集群中重新生成它的步骤。
第 1 步:通过启用私有(private)群集选项来创建私有(private) AKS 群集。
第 2 步:创建Jump Box以连接到专用集群。 我已经创建了 ubuntu 20.04 VM 并安装了 kubectl 工具。
$ az login
$ az aks get-credentials --resource-group rgvjy --name aks-vjy
步骤 3: 在 AKS 群集上启动 nginx-ingress Controller 。 我已经使用 helm 在集群上部署了入口 Controller ,它会自动创建负载均衡器服务。
$ NAMESPACE=ingress-basic
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
$ helm repo update
$ helm install ingress-nginx ingress-nginx/ingress-nginx --create-namespace --namespace $NAMESPACE --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
引用这个link有关创建入口 Controller 的更多信息。
第 4 步:我已在部署 ingress 的命名空间中部署了 nginx 应用程序。
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deploy
spec:
replicas: 1
selector:
matchLabels:
app: test-deploy
template:
metadata:
labels:
app: test-deploy
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: test-deploy
spec:
type: ClusterIP
ports:
- port: 80
selector:
app: test-deploy
$ kubectl apply -f test-deploy.yaml -n ingress-basic
第 5 步:创建到应用程序的 Ingress 路由。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-nginx-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /test-deploy(/|$)(.*)
pathType: Prefix
backend:
service:
name: test-deploy
port:
number: 80
- path: /(.*)
pathType: Prefix
backend:
service:
name: test-deploy
port:
number: 80
$ kubectl get ingress -n ingress-basic
NAME CLASS HOSTS ADDRESS PORTS AGE
test-nginx-ingress nginx * 20.81.x.xxx 80 110s
第 6 步:在跳转框的 /etc/hosts 文件中添加入口负载均衡器 IP 地址,以使用< strong>DNS 名称解析。
$ curl http://test-nginx-ingress/test-deploy
注意:DNS 名称无法通过互联网使用,因为我们在内部主机文件中引用它
第 7 步:在 google 中浏览入口负载均衡器 IP/[route-name] 以检查入口路由。
注意:在此重现中,我已将应用程序部署和 nginx-ingress 部署放置在同一命名空间中。
关于azure - Nginx 入口 Controller - 无法使用主机名访问 AKS Azure 负载均衡器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75672639/