当前位置: 首页 > 知识库问答 >
问题:

Azure Kubernetes Nginx Ingress客户端证书身份验证问题

何高旻
2023-03-14

整个周末我都在为这个问题苦苦挣扎,现在我跪下来希望你们中的一个天才能解决我的问题。

I short:我有一个ingress nginx控制器(图:nginx/nginx ingress:1.5.8),我正试图与之实现自签名的相互身份验证。

https方面工作正常,但我(我认为)遇到的问题是,入口控制器使用默认证书重新路由请求,入口使用默认CA进行验证(因为它找不到我的CA)。

所以…救命!

我在这段旅程中经历的步骤(双关语):

我已经在当地的Minikube集群中进行了测试,一切都很好。当我将其执行到入口控制器盒中并对nginx进行cat时。对于我的两个集群(Minikube和Azure),我确实发现了很大的差异;因此,我刚刚发现我在minikube和azure-k8s nginx ingresses方面与苹果和梨合作。

这是入口设置,作为我的迷你库集群的魅力(我使用的入口或多或少是您在链接中找到的文件的副本):https://kubernetes.github.io/ingress-nginx/examples/auth/client-certs/

此外,我发现了这个在很大程度上描述了我遇到的问题:https://success.docker.com/article/how-to-configure-a-default-tls-certificate-for-the-kubernetes-nginx-ingress-controller从上面的链接中,解决方案很简单;核弹从轨道进入并创建一个新的。嗯...事情是这样的,这是一个生产集群,如果我这样做,我的老板会很高兴的。

我在“exec-it bash”在Azure ingress控制器内漫游时发现,没有找到公共根证书文件夹(/etc/ssl/)。不知道为什么,不过我还是要提一下。

我还发现了参数--default-ssl-证书=default/foo-tls,但这是默认值。由于稍后会对不同的客户端有其他需求,我必须能够为不同的入口指定动态CA证书。

我会通过我的nginx。我认为这就是下面的问题。希望能收到你们的回音,因为此时此刻我完全迷失了方向。如果需要更多信息,请联系我。

user  nginx;
worker_processes  auto;
daemon off;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';


    access_log  /var/log/nginx/access.log  main;


    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout 65s;
    keepalive_requests 100;

    #gzip  on;

    server_names_hash_max_size 512;


    variables_hash_bucket_size 256;
    variables_hash_max_size 1024;

    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }





    server {
        listen 80 default_server;
        listen 443 ssl default_server;

        ssl_certificate /etc/nginx/secrets/default;
        ssl_certificate_key /etc/nginx/secrets/default;

        server_name _;
        server_tokens "on";
        access_log off;



        location / {
           return 404;
        }
    }
    # stub_status
    server {
        listen 8080;

        allow 127.0.0.1;
        deny all;
        location /stub_status {
            stub_status;
        }
    }
    server {
        listen unix:/var/run/nginx-status.sock;
        access_log off;

        location /stub_status {
            stub_status;
        }
    }

    include /etc/nginx/config-version.conf;
    include /etc/nginx/conf.d/*.conf;

    server {
        listen unix:/var/run/nginx-502-server.sock;
        access_log off;

        location / {
            return 502;
        }
    }
}

stream {
    log_format  stream-main  '$remote_addr [$time_local] '
                      '$protocol $status $bytes_sent $bytes_received '
                      '$session_time';

    access_log  /var/log/nginx/stream-access.log  stream-main;

共有1个答案

喻昀
2023-03-14

因此,问题归结为入口控制器陈旧过时。没有部署的原始掌舵图,所以我自然担心回滚选项。Anyhoo公司-

停机时间最短-

必须在标准azure helm install命令中添加一个参数,以强制设置资源的公共IP;如果任何可怜的灵魂发现自己处于新的helm-cli和丢失图表的不幸境地,请将其粘贴在下面。

就是这样;让您的服务保持最新,并确保保存您的图表!

helm install nginx stable/nginx-ingress --namespace ingress-basic \
                                           --set controller.replicaCount=2 \
                                           --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
                                           --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
                                           --set controller.service.loadBalancerIP=*YourVeryPreciousPublicIP*
 类似资料:
  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

  • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

  • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一

  • 有时需要对某些网络资源(如Servlet、JSP等)进行访问权限验证,也就是说,有访问权限的用户才能访问该网络资源。进行访问权限验证的方法很多,但通过HTTP响应消息头的WWW-Authenticate字段进行访问权限的验证应该是众多权限验证方法中比较简单的一个。 通过HTTP响应消息头的WWW-Authenticate字段可以使浏览器出现一个验证对话框,访问者需要在这个对话框中输入用户名和密码,

  • 问题内容: 我需要导入证书,以便向Spring Boot应用程序中的外部服务发出http请求。 我该如何设置Spring Boot来做到这一点? 那里有很多信息,但我发现所有这些都令人困惑。似乎我可能只需要创建类似“ truststore.jks”密钥库的内容并导入正确的证书,然后将一些条目添加到我的application.properties中即可。 问题答案: 打开您的终端或 回答所有问题。在