簡體   English   中英

Azure Kubernetes Nginx-Ingress客戶端證書認證問題

[英]Azure Kubernetes Nginx-Ingress client certificate auth problem

我整個周末都在為此苦苦掙扎,現在我跪下希望你們中的一個天才能夠解決我的問題。

我簡短地說:我有一個 ingress-nginx controller(圖片:nginx/nginx-ingress:1.5.8),我正在嘗試與它實現自簽名相互身份驗證。

https 方面工作正常,但我遇到的問題(我認為)是入口 controller 使用默認證書重新路由請求,並且入口使用默認 CA 驗證(因為它找不到我的 CA)。

所以..救命!

我在這段旅程中經歷的步驟(雙關語):

我已經在本地 Minikube 集群中對其進行了測試,這一切都像一個魅力。 當我 exec -it 進入 ingress-controller-pod 並為我的兩個集群(Minikube 和 Azure)搜索 nginx.conf 時,我確實發現了很大的差異; 因此,我剛剛發現我正在使用 minikube- 與 azure-k8s nginx-ingresses 方面的蘋果和梨。

這是我的 minikube 集群的魅力的入口設置(我使用的入口或多或少是您在鏈接中找到的文件的副本): 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-controller 內漫游時發現的另一個發現是找不到公共根證書文件夾 (/etc/ssl/)。 不知道為什么,但我會提到它。

我還發現了參數 --default-ssl-certificate=default/foo-tls,但這是默認值。 由於稍后對不同的客戶端身份驗證會有其他需求,我必須能夠為不同的入口指定動態 CA 證書。

我將通過我認為是以下問題的 nginx.conf。 希望收到你們中的一些人的回復,因為此時我完全迷路了。 如果需要更多信息,請聯系我。

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;

所以問題歸結為入口控制器過時和過時。 沒有部署的原始 helm-chart,所以我自然擔心回滾選項。 Anyhoo -> 在當地時間的半夜大吃一驚,對命名空間進行了核爆; 重新創建了命名空間; 掌舵安裝穩定/nginx-ingress。

最短停機時間 - > 最多 1 分鍾,但請注意在您的服務進行所有第三次世界大戰之前鎖定連接到負載均衡器的公共 IP。

必須向標准 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*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM