Azure Kubernetes Nginx-Ingress 客户端证书认证问题
Azure Kubernetes Nginx-Ingress client certificate auth problem
我整个周末都在为这个问题苦苦挣扎,现在我跪下来希望你们中的一位天才能解决我的问题。
简而言之:我有一个 ingress-nginx 控制器(图片:nginx/nginx-ingress:1.5.8),我正试图通过它实现自签名相互身份验证。
https 方面一切正常,但我遇到的问题(我认为)是入口控制器使用默认证书重新路由请求并且入口使用默认 CA 验证(因为它找不到我的 CA)。
所以..帮助!
我在这个 f*** 旅程中经历的步骤(双关语意):
我已经在本地 Minikube 集群中对其进行了测试,一切都很顺利。当我 exec -it 进入 ingress-controller-pod 并为我的两个集群(Minikube 和 Azure) cat nginx.conf 时,我确实发现了很大的差异;因此我刚刚发现我正在使用 minikube- vs azure-k8s nginx-ingresses 方面的苹果和梨。
这是对我的 minikube 集群很有吸引力的入口设置(我使用的入口或多或少是您在 link 中找到的文件的副本):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
从上面的 link 来看,解决方案很简单;用核武器从轨道进入并创建一个新的。嗯..事情是这样的,这是一个生产集群,如果我这样做的话,我的老板们会很高兴的。
我在 "exec -it bash"-在 Azure-ingress-controller 内部漫游时发现的另一个发现是找不到 public 根证书文件夹 (/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;
所以问题归结为 ingress-controller 陈旧过时。没有部署的原始 helm-chart,所以我很自然地担心回滚选项。 Anyhoo -> 在当地时间半夜进行了一次信仰的飞跃,并破坏了命名空间;重新创建命名空间;掌舵安装 stable/nginx-ingress.
有最短的停机时间 -> 最多 1 分钟,但是 ware 在进入所有 3.rd 世界之前锁定连接到负载均衡器的 public IP war 在您的服务上。
必须向标准 azure helm install 命令添加一个参数以强制设置资源的 public 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*
我整个周末都在为这个问题苦苦挣扎,现在我跪下来希望你们中的一位天才能解决我的问题。
简而言之:我有一个 ingress-nginx 控制器(图片:nginx/nginx-ingress:1.5.8),我正试图通过它实现自签名相互身份验证。
https 方面一切正常,但我遇到的问题(我认为)是入口控制器使用默认证书重新路由请求并且入口使用默认 CA 验证(因为它找不到我的 CA)。
所以..帮助!
我在这个 f*** 旅程中经历的步骤(双关语意):
我已经在本地 Minikube 集群中对其进行了测试,一切都很顺利。当我 exec -it 进入 ingress-controller-pod 并为我的两个集群(Minikube 和 Azure) cat nginx.conf 时,我确实发现了很大的差异;因此我刚刚发现我正在使用 minikube- vs azure-k8s nginx-ingresses 方面的苹果和梨。
这是对我的 minikube 集群很有吸引力的入口设置(我使用的入口或多或少是您在 link 中找到的文件的副本):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 从上面的 link 来看,解决方案很简单;用核武器从轨道进入并创建一个新的。嗯..事情是这样的,这是一个生产集群,如果我这样做的话,我的老板们会很高兴的。
我在 "exec -it bash"-在 Azure-ingress-controller 内部漫游时发现的另一个发现是找不到 public 根证书文件夹 (/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;
所以问题归结为 ingress-controller 陈旧过时。没有部署的原始 helm-chart,所以我很自然地担心回滚选项。 Anyhoo -> 在当地时间半夜进行了一次信仰的飞跃,并破坏了命名空间;重新创建命名空间;掌舵安装 stable/nginx-ingress.
有最短的停机时间 -> 最多 1 分钟,但是 ware 在进入所有 3.rd 世界之前锁定连接到负载均衡器的 public IP war 在您的服务上。
必须向标准 azure helm install 命令添加一个参数以强制设置资源的 public 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*