CVE-2017-14491 ¶
kube-dns 使用的 dnsmasq 中存在一个漏洞,需要升级 kube-dns 组件。该组件是 Kubernetes 中安装的默认 DNS 组件。该漏洞可能被外部利用。以下链接提供了有关 CVE 的完整详细信息。此漏洞并非 Kubernetes 特定的漏洞,而是存在于 dnsmasq 中。
当前 kOps 状态 ¶
kops
版本 1.7.1 解决了此 CVE。此版本的 kops
将升级和创建集群。kops
1.8.0.alpha.1 版本不包含所需的更改,但 1.8.0.apha.2 版本发布时将包含所需的补丁。
升级集群 ¶
执行 kops update cluster
时,kube-dns 部署将自动升级。将 my-cluster.example.com
替换为您的集群名称。如果您正在升级 Kubernetes 1.4.x 或 1.5.x 集群,您可能需要按照以下说明为 kube-dns 创建所需的配置映射。
升级命令
kops update cluster --yes --name my-cluster.example.com
验证更改是否已应用到部署
kubectl get deployment -n kube-system kube-dns \
-o jsonpath='{.spec.template.spec.containers[?(@.name == "dnsmasq")].image}'
升级将在渠道实用程序在几分钟内拾取更改后发生。
已测试的 Kubernetes 版本 ¶
Kubernetes 版本 1.5.8、1.6.11、1.7.7 和 1.8.0 已使用新版本的 kube-dns
部署进行了全面测试。其他版本应该可以正常运行,但建议升级到已测试的版本。我们已经成功地帮助 1.4.x 用户进行了升级,但我们无法验证其在生产环境中的完整稳定性。始终建议在非生产环境中进行本地测试。我们无法量化使用未经测试版本的风险。
已修复的 kOps 版本 ¶
我们计划在 1.8.x kOps 版本中发布。1.7.1 版本已发布,其中包含所需的更改。如果您使用的是 1.8.x alpha 版本,我们建议应用热修复。
已修复的 kOps 版本矩阵 ¶
kOps 版本 | 已修复 | 已发布 | 将修复 | URL |
---|---|---|---|---|
1.7.1 | Y | Y | 不适用 | 这里 |
主 | Y | N | 不适用 | 这里 |
1.8.0 | N | N | Y | 不适用 |
1.8.0.alpha.1 | N | Y | N | 不适用 |
1.7.0 | N | Y | N | 不适用 |
kOps PR 修复 ¶
kOps 跟踪问题 ¶
- 由 @chrislovecnm 在 #3512 中提交
热修复说明 ¶
最小的修复只是更新使用 dnsmasq 的 pod 的容器。您可以应用此修复程序而不会出现停机时间。不同 Kubernetes 版本的热修复说明有所不同。较新版本的 kube-dns
包含 k8s-dns-dnsmasq-nanny-amd64
容器。
Kubernetes 版本 1.6.x 及更高版本 ¶
热修复的安装 ¶
将更新应用到容器
kubectl set image deployment/kube-dns -n kube-system \
dnsmasq=k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.5
验证更改是否已应用到部署
kubectl get deployment -n kube-system kube-dns \
-o jsonpath='{.spec.template.spec.containers[?(@.name == "dnsmasq")].image}'
验证 ¶
要验证 pod 是否已部署
kubectl get pods -n kube-system -o \
custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image \
-l k8s-app=kube-dns
您应该看到 k8s-dns-dnsmasq-nanny-amd64 容器的版本 1.14.5
NAME IMAGE
kube-dns-1100866048-3lqm0 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.5,k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.5,k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.5
kube-dns-1100866048-tjlv2 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.5,k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.5,k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.5
Kubernetes 版本 1.4.x - 1.5.x ¶
检查您是否拥有 kube-dns 的新配置映射。1.14.5 容器需要配置映射,没有配置映射,kube-dns 不会 启动。
依赖项的安装 ¶
kubectl -n kube-system get configmap kube-dns
如果配置映射不存在,则创建一个空的配置映射。
热修复的安装 ¶
kubectl create configmap -n kube-system kube-dns
将 kube-dns 容器升级到新版本。
kubectl set image deployment/kube-dns -n kube-system \
dnsmasq=k8s.gcr.io/k8s-dns-dnsmasq-amd64:1.14.5
验证更改是否已应用到部署
kubectl get deployment -n kube-system kube-dns \
-o jsonpath='{.spec.template.spec.containers[?(@.name == "dnsmasq")].image}'
kubectl get pods -n kube-system -o \
custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image \
-l k8s-app=kube-dns
您应该看到 dnsmasq pod 的版本 1.14.5
NAME IMAGE
kube-dns-4146767324-djthf k8s.gcr.io/kubedns-amd64:1.9,k8s.gcr.io/k8s-dns-dnsmasq-amd64:1.14.5,k8s.gcr.io/dnsmasq-metrics-amd64:1.0,k8s.gcr.io/exechealthz-amd64:1.2
kube-dns-4146767324-kloxi k8s.gcr.io/kubedns-amd64:1.9,k8s.gcr.io/k8s-dns-dnsmasq-amd64:1.14.5,k8s.gcr.io/dnsmasq-metrics-amd64:1.0,k8s.gcr.io/exechealthz-amd64:1.2
更多信息 ¶
感谢 ¶
感谢所有提供帮助的人,包括 @mikesplain、@chrislovecnm、@snoby、@justinsb、@3h4x、@aaronlevy