Kubernetes (AKS): ошибка входа nginx 308 Ошибка постоянного перенаправления. Частный входной контроллер nginx

В целом описание того, что я делаю: я использую частный контроллер входа nginx в AKS (служба Azure Kubernetes) и настраиваю драйвер CSI хранилища секретов, чтобы включить контроллер входа NGINX с TLS, используя этот документ: Doc1

Ниже приведены шаги, которые я делаю в соответствии с документом:

  1. Развертывание поставщика секретов:
      apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: azure-tls
spec:
  provider: azure
  secretObjects:                            # secretObjects defines the desired state of synced K8s secret objects
  - secretName: ingress-tls-csi
    type: kubernetes.io/tls
    data: 
    - objectName: <CertName>
      key: tls.key
    - objectName: <CertName>
      key: tls.crt
  parameters:
    usePodIdentity: "false"
    useVMManagedIdentity: "true"
    userAssignedIdentityID: <GUIDForManagedIdentityProviderHavingAccessToKeyvault>
    keyvaultName: <KeyvaultName>                 # the name of the AKV instance
    objects: |
      array:
        - |
          objectName: <CertName>
          objectType: secret
    tenantId: <GUIDForKeyVaultTenant>                    # the tenant ID of the AKV instance
  1. Развертывание частного контроллера входящего трафика nginx с использованием этой документации: Doc2
      helm upgrade nginx-ingress ingress-nginx/ingress-nginx `
         --install `
         --version 4.1.3 `
         --namespace ingress-nginx `
         --set controller.replicaCount=2 `
         --set controller.nodeSelector."kubernetes\.io/os"=linux `
         --set controller.image.registry="ashwin.azurecr.io" `
         --set controller.image.image="ingress-nginx/controller" `
         --set controller.image.tag="v1.2.1" `
         --set controller.image.digest="" `
         --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux `
         --set controller.admissionWebhooks.patch.image.registry="ashwin.azurecr.io" `
         --set controller.admissionWebhooks.patch.image.image="ingress-nginx/kube-webhook-certgen" `
         --set controller.admissionWebhooks.patch.image.tag="v1.1.1" `
         --set controller.admissionWebhooks.patch.image.digest="" `
         --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux `
         --set defaultBackend.image.registry="ashwin.azurecr.io" `
         --set defaultBackend.image.image="defaultbackend-amd64" `
         --set defaultBackend.image.tag="1.5" `
         --set defaultBackend.image.digest="" `
         -f "..\..\manifests\internal-controller-tls.yaml" --debug

The ..\..\manifests\internal-controller-tls.yamlфайл имеет такое содержимое:

      controller:
  service:
    loadBalancerIP: 10.0.0.11
    annotations:
      service.beta.kubernetes.io/azure-load-balancer-internal: "true"
      service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path: "/healthz"
  extraVolumes:
      - name: secrets-store-inline
        csi:
          driver: secrets-store.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: "azure-tls"
  extraVolumeMounts:
      - name: secrets-store-inline
        mountPath: "/mnt/secrets-store"
        readOnly: true
  1. Развернул вход с этой конфигурацией (взято из здесь Doc1 ):
      apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: healthcheck-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - ingress.cluster.apaca.demo.com
    secretName: ingress-tls-csi
  rules:
    - host: ingress.cluster.apaca.demo.com
      http:
        paths:
        - path: /cluster-ingress-healthz(/|$)(.*)
          pathType: Prefix
          backend:
            service:
              name: service1
              port:
                number: 80
        - path: /(.*)
          pathType: Prefix
          backend:
            service:
              name: service2
              port:
                number: 80

После выполнения 3 шагов я вижу308 Permanent Redirectкогда я выполняю команду curl для конечной точки http входа:

      azadmin@acs-apaca-aksVm:~$ curl -v http://ingress.cluster.apaca.demo.com
* Rebuilt URL to: http://ingress.cluster.apaca.demo.com/
*   Trying 10.0.0.11...
* TCP_NODELAY set
* Connected to ingress.cluster.apaca.demo.com (10.0.0.11) port 80 (#0)
> GET / HTTP/1.1
> Host: ingress.cluster.apaca.demo.com
> User-Agent: curl/7.58.0
> Accept: */*
> 
< HTTP/1.1 308 Permanent Redirect
< Date: Thu, 14 Jul 2022 04:28:53 GMT
< Content-Type: text/html
< Content-Length: 164
< Connection: keep-alive
< Location: https://ingress.cluster.apaca.demo.com
< 
<html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host ingress.cluster.apaca.demo.com left intact
azadmin@acs-apaca-aksVm:~$ 

Но когда я добавляю эту дополнительную аннотацию в kubernetes ingress, конечная точка http показывает правильное содержимое.

Это то, что я вижу, когда делаю завиток к конечной точке входа http:

      azadmin@acs-apaca-aksVm:~$ curl -v http://ingress.cluster.apaca.demo.com
* Rebuilt URL to: http://ingress.cluster.apaca.demo.com/
*   Trying 10.0.0.11...
* TCP_NODELAY set
* Connected to ingress.cluster.apaca.demo.com (10.0.0.11) port 80 (#0)
> GET / HTTP/1.1
> Host: ingress.cluster.apaca.demo.com
> User-Agent: curl/7.58.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Thu, 14 Jul 2022 04:33:34 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 617
< Connection: keep-alive
< 
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <link rel="stylesheet" type="text/css" href="/static/default.css">
    <title>WELCOME TO AZURE KUBERNETES SERVICE</title>

    <script language="JavaScript">
        function send(form){
        }
    </script>

</head>
<body>
    <div id="container">
        <form id="form" name="form" action="/"" method="post"><center>
        <div id="logo">WELCOME TO AZURE KUBERNETES SERVICE</div>
        <div id="space"></div>
        <img src="/static/acs.png" als="acs logo">
        <div id="form">      
        </div>
    </div>     
</body>
* Connection #0 to host ingress.cluster.apaca.demo.com left intact
</html>azadmin@acs-apaca-aksVm:~$ 

но с дополнительной аннотациейnginx.ingress.kubernetes.io/ssl-redirect: "false"запросы будут только http. Когда я делаю завиток к конечной точке https для входа. Я вижу это в обоих случаях (case 1: аннотация не добавлена ​​к входу,case 2: аннотация добавлена ​​на вход).

      azadmin@acs-apaca-aksVm:~$ curl -v https://ingress.cluster.apaca.demo.com
* Rebuilt URL to: https://ingress.cluster.apaca.demo.com/
*   Trying 10.0.0.11...
* TCP_NODELAY set
* Connected to ingress.cluster.apaca.demo.com (10.0.0.11) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Unknown (8):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (OUT), TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* stopped the pause stream!
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
azadmin@acs-apaca-aksVm:~$ 

Пожалуйста, помогите мне понять, что я должен изменить здесь, чтобы ошибка перенаправления 308 исчезла, и я мог успешно подключить https к входной конечной точке.

0 ответов

Другие вопросы по тегам