kubernetes Nginx入口控制器-无法使用主机名访问AKS Azure负载平衡器

7d7tgy0s  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(177)

我有一个private AKS集群,我正在使用nginx入口控制器。到目前为止,我已经做了以下工作。
1.安装nginx入口控制器

NAMESPACE=jananath-test

helm upgrade --install ingress-nginx ingress-nginx  \
--repo https://kubernetes.github.io/ingress-nginx  --namespace $NAMESPACE --create-namespace

1.使用入口资源创建简单部署

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负载平衡器。
一旦部署,我也可以成功地看到外部IP如下(一个假的IP隐藏我的实际IP如下)

# kubectl get ing

NAME                  CLASS   HOSTS             ADDRESS        PORTS   AGE
minimal-ingress       nginx   jananath.test   20.6.21.123      80      6m58s

1.由于我还没有域名,我将jananath.test添加到/etc/hosts条目中,如下所示:

20.6.21.123 jananath.test

但问题是,当我尝试使用http://jananath.test/https://jananath.test访问部署时(可能https无法工作,因为我没有指定任何证书)。
但我够不着,你知道的,浏览器一直在转。
有人能帮我排除故障吗?
入口控制器日志似乎也很好,因为我没有看到任何错误。
这是因为我使用的是私有集群吗?还是入口创建的负载均衡器驻留在AKS集群创建的一个资源组中(部署时),不知何故无法从互联网访问?
非常感谢你们:)

vc6uscn9

vc6uscn91#

我已尝试在public AKS集群和private AKS集群中重现此问题。我可以在这两个集群中使用nginx-ingress服务成功浏览应用程序。
以下是在private AKS群集中重现该文件的步骤。

步骤1:通过启用专用群集选项创建专用AKS群集。x1c 0d1x
步骤2:创建
Jump Box
以连接到私有集群。我已经创建了ubuntu 20.04VM并安装了kubectl工具。

$ az login
$ az aks get-credentials --resource-group rgvjy --name aks-vjy

步骤3:在AKS群集上启动nginx-ingress controller。我已使用helm在群集上部署了ingress 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

**第4步:**我已经在部署入口的名称空间中部署了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:**创建到应用程序的入口路由。

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地址,以使用DNS名称**解析检查连接。

$ curl http://test-nginx-ingress/test-deploy

注意:DNS名称在Internet上不起作用,因为我们在内部主机文件中引用它
**步骤7:**在google中浏览入口负载平衡器IP/[route-name]以检查入口路由。

注意:在本演示中,我将应用程序部署和nginx-ingress部署放在同一名称空间中。

相关问题