修复 ingress-nginx 1.20.0 漏洞 ¶
近期看到 ingress 发布公告 1.20.0 版本有漏洞,公司正好使用的是这个版本的 ingress-class。按照 kubesphere 官方文档升级修复。
KubeSphere 网关组件(ingress-nginx)安全漏洞修复 ¶
验证是否受影响 ¶
请执行以下步骤检查您的系统是否受影响。
要检查您的集群是否正在运行 Kubernetes 的 ingress-nginx,请在具有集群范围读取权限的帐户下运行以下命令:
kubectl get pods --selector app.kubernetes.io/name=ingress-nginx --all-namespaces
如果 Kubernetes 的 ingress-nginx 正在运行,则集群中应该也存在存在漏洞的 admission webhook。您可以通过运行以下命令来确认:
kubectl get ValidatingWebhookConfiguration ingress-nginx-admission -o yaml
在这种情况下,首先要了解该ingress-nginx-controller-admission服务是否公开。在下面的示例中,我们可以看到该服务通过私有 ClusterIP 公开,而不是直接暴露在互联网上:
root@k8s-worker01:~# kubectl get service ingress-nginx-controller-admission -n ingress-nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller-admission ClusterIP 10.233.28.158
443/TCP 175d
即使易受攻击的准入控制器未暴露在互联网上,您也需要修复该漏洞。请检查正在运行的 ingress-nginx 版本:
kubectl get pods --selector app.kubernetes.io/name=ingress-nginx --selector app.kubernetes.io/component=controller -A -o yaml | grep image:
示例结果:
image: quay.io/jetstack/cert-manager-controller:v1.16.1
image: quay.io/jetstack/cert-manager-controller:v1.16.1
image: registry.k8s.io/ingress-nginx/controller:v1.12.0-beta.0@sha256:9724476b928967173d501040631b23ba07f47073999e80e34b120e8db5f234d5
image: sha256:11b916a025f028a5868d51d66773e876910636a1c261e919d72864dbb9bfc860
image: registry.k8s.io/ingress-nginx/controller:v1.12.0-beta.0@sha256:9724476b928967173d501040631b23ba07f47073999e80e34b120e8db5f234d5
image: sha256:11b916a025f028a5868d51d66773e876910636a1c261e919d72864dbb9bfc860
image: registry.k8s.io/ingress-nginx/controller:v1.12.0-beta.0@sha256:9724476b928967173d501040631b23ba07f47073999e80e34b120e8db5f234d5
image: sha256:11b916a025f028a5868d51d66773e876910636a1c261e919d72864dbb9bfc860
image: docker.io/kubesphere/ingress-nginx-controller:v1.4.0
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/kubesphere/ingress-nginx-controller:v1.4.0
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/kubesphere/ingress-nginx-controller:v1.4.0
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/kubesphere/ingress-nginx-controller:v1.4.0
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/istio/proxyv2:1.16.5
受影响版本:
- < v1.11.0
- v1.11.0 - v1.11.4
- v1.12.0
如果您使用的是受影响版本,请立即解决方案或缓解措施。
解决方案 ¶
1. 升级(nginx 社区推荐方案) ¶
升级至以下安全版本之一:
- v1.11.5
- v1.12.1
- 或更高版本
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.1/deploy/static/provider/cloud/deploy.yaml
2. 升级修复(KubeSphere 产品中的网关) ¶
对于 KubeSphere 和 KubeSphere 企业版 v4.1.3,将 Kubesphere 网关升级到 v1.0.4 版本(Ingress-Nginx controller 版本 v1.12.1)。
对于 v4.1.3 之前的 KubeSphere 和 KubeSphere 企业版,请先升级至 v4.1.3。
1. 升级 KubeSphere v4.1.x 到 v4.1.3 ¶
升级 host 集群,确认当前集群为待升级集群。
kubectl get node -o wide
导出当前集群 ks-core 的配置。
helm get values -n kubesphere-system ks-core -o yaml > host-cluster-custom-values.yaml
修改配置文件
# 需要注意以下配置项,其他的配置字段请保留
global:
imageRegistry: docker.io
extension:
imageRegistry: docker.io
# 注意集群角色参数由 role 变更为 multicluster.role
multicluster:
role: host
执行以下命令开始升级。
helm -n kubesphere-system upgrade ks-core https://charts.kubesphere.io/main/ks-core-1.1.4.tgz -f host-cluster-custom-values.yaml --wait --debug
检查 host 集群是否升级成功
helm -n kubesphere-system get metadata ks-core
NAME: ks-core
CHART: ks-core
VERSION: 1.1.4
APP_VERSION: v4.1.3
NAMESPACE: kubesphere-system
2. 升级扩展组件 ¶
TAG=$(curl -s https://api.github.com/repos/kubesphere-extensions/ks-extensions/releases/latest | jq -r '.tag_name')
helm -n kubesphere-system upgrade ks-core https://charts.kubesphere.io/main/ks-core-1.1.4.tgz --set ksExtensionRepository.image.tag=$TAG
| 点击扩展中心 → 选择更新 | |
|---|---|
![]() |
![]() |
最后效果
root@k8s-worker01:~# kubectl get pods --selector app.kubernetes.io/name=ingress-nginx --selector app.kubernetes.io/component=controller -A -o yaml | grep image:
image: quay.io/jetstack/cert-manager-controller:v1.16.1
image: quay.io/jetstack/cert-manager-controller:v1.16.1
image: registry.k8s.io/ingress-nginx/controller:v1.12.1@sha256:d2fbc4ec70d8aa2050dd91a91506e998765e86c96f32cffb56c503c9c34eed5b
image: docker.io/kubesphere/ingress-nginx-controller:v1.12.1
image: registry.k8s.io/ingress-nginx/controller:v1.12.1@sha256:d2fbc4ec70d8aa2050dd91a91506e998765e86c96f32cffb56c503c9c34eed5b
- image: registry.k8s.io/ingress-nginx/controller:v1.12.1@sha256:d2fbc4ec70d8aa2050dd91a91506e998765e86c96f32cffb56c503c9c34eed5b
image: registry.k8s.io/ingress-nginx/controller:v1.12.1@sha256:d2fbc4ec70d8aa2050dd91a91506e998765e86c96f32cffb56c503c9c34eed5b
image: docker.io/kubesphere/ingress-nginx-controller:v1.12.1
image: docker.io/kubesphere/ingress-nginx-controller:v1.12.1
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/kubesphere/ingress-nginx-controller:v1.12.1
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/kubesphere/ingress-nginx-controller:v1.12.1
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/kubesphere/ingress-nginx-controller:v1.12.1
image: docker.io/istio/proxyv2:1.16.5
image: docker.io/istio/proxyv2:1.16.5

