K8S 生態週報| Istio 已修復致使 Pod 崩潰的 bug

「K8S 生態週報」內容主要包含我所接觸到的 K8S 生態相關的每週值得推薦的一些信息。歡迎訂閱知乎專欄 「k8s生態」

Istio 1.6.7 發佈

Istio 1.6.7 是爲了解決在 1.6.6 中引入的一個 buggit

該 bug 可能會致使 在使用 Istio 1.6.6 時,某些 Pod 進入 CrashLoopBackOff 狀態,沒法正常提供服務。github

修復後的核心代碼以下,這裏主要是增長另外一個返回值 expectpodjson

經過此方法獲取 Pod 時,Pod 有兩種狀況可能爲空:ide

  • 該 endpoint 未關聯 Pod,這時 expectpod 爲 false
  • 該 endpoint 已關聯 Pod,但未找到 Pod,這時 expectpod 爲 true

而這種狀況發生的最主要緣由多是因爲最終一致性,或者亂序事件等。oop

建議若是打算升級 Istio 的讀者,直接跳過 1.6.6 版本,以避免影響到服務。spa

func getPod(c *Controller, ip string, ep *metav1.ObjectMeta, targetRef *v1.ObjectReference, host host.Name) (rpod *v1.Pod, expectPod bool) {
    pod := c.pods.getPodByIP(ip)
    if pod != nil {
        return pod, false
    }
    if targetRef != nil && targetRef.Kind == "Pod" {
        key := kube.KeyFunc(targetRef.Name, targetRef.Namespace)
        podFromInformer, f, err := c.pods.informer.GetStore().GetByKey(key)
        if err != nil || !f {
            log.Debugf("Endpoint without pod %s %s.%s error: %v", ip, ep.Name, ep.Namespace, err)
            endpointsWithNoPods.Increment()
            if c.metrics != nil {
                c.metrics.AddMetric(model.EndpointNoPod, string(host), nil, ip)
            }

            epkey := kube.KeyFunc(ep.Name, ep.Namespace)
            c.pods.queueEndpointEventOnPodArrival(epkey, ip)
            return nil, true
        }
        pod = podFromInformer.(*v1.Pod)
    }
    return pod, false
}

Trivy v0.10.1 發佈

本週 Trivy 相繼發佈了 v0.10.0 和 v0.10.1 版本,咱們一塊兒來看看有哪些值得關注的內容吧:3d

  • #559容許經過使用 --severity 選項進行過濾,只查看特定級別的漏洞信息
(MoeLove) ➜  ~ trivy i --severity LOW  alpine:3.10.2   
2020-08-02T23:19:28.060+0800    INFO    Detecting Alpine vulnerabilities...

alpine:3.10.2 (alpine 3.10.2)
=============================
Total: 1 (LOW: 1)

+---------+------------------+----------+-------------------+---------------+--------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION |             TITLE              |
+---------+------------------+----------+-------------------+---------------+--------------------------------+
| openssl | CVE-2019-1547    | LOW      | 1.1.1c-r0         | 1.1.1d-r0     | openssl: side-channel weak     |
|         |                  |          |                   |               | encryption vulnerability       |
+---------+------------------+----------+-------------------+---------------+--------------------------------+
  • #562支持經過 Open Policy Agent (OPA) 來進行過濾。

比方說,咱們想要實現和上面使用 --severity LOW 參數相同的效果,那咱們能夠定義以下 rego 規則文件。注意: 包名必須爲 trivy ,同時,它還必須包含一個名爲 ignore 的規則。code

(MoeLove) ➜  ~ cat test_trivy.rego 
package trivy

ignore {
    input.Severity == {"UNKNOWN", "MEDIUM", "HIGH", "CRITICAL"}[_]
}

經過給 trivy 傳遞 --ignore-policy 參數便可。(這裏必定要注意搞清楚邏輯, trivy 的參數爲忽略掉匹配成功的規則。)orm

(MoeLove) ➜  ~ trivy image  --ignore-policy test_trivy.rego  alpine:3.10.2
2020-08-02T23:54:40.843+0800    INFO    Detecting Alpine vulnerabilities...

alpine:3.10.2 (alpine 3.10.2)
=============================
Total: 1 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 0, CRITICAL: 0)

+---------+------------------+----------+-------------------+---------------+--------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION |             TITLE              |
+---------+------------------+----------+-------------------+---------------+--------------------------------+
| openssl | CVE-2019-1547    | LOW      | 1.1.1c-r0         | 1.1.1d-r0     | openssl: side-channel weak     |
|         |                  |          |                   |               | encryption vulnerability       |
+---------+------------------+----------+-------------------+---------------+--------------------------------+
  • #561在輸出內容中新增長了 CweIDs 字段。
(MoeLove) ➜  ~ trivy image -f json  --ignore-policy test_trivy.rego  alpine:3.10.2
[
  {
    "Target": "alpine:3.10.2 (alpine 3.10.2)",
    "Type": "alpine",
    "Vulnerabilities": 
      {
        "VulnerabilityID": "CVE-2019-1547",
        "PkgName": "openssl",
        "InstalledVersion": "1.1.1c-r0",
        "FixedVersion": "1.1.1d-r0",
        "CweIDs": [
          "CWE-311"
      ],
      ...
    }
  }
]
  • #574 增長了 --list-all-pkgs 選項,容許輸出被掃描系統中已經安裝的包及其版本等。

然後續發佈的 v0.10.1 版本主要是爲了修正 v0.10.0 中對 Dockerfile 中執行用戶的修改,繼續使用 root 用戶做爲容器鏡像中的默認用戶事件

更多關於此版本的信息,請查看 Trivy ReleaseNote, 歡迎下載使用。

上游進展

  • #93248 修改了 Kubelet 中 CFS shares 相關的邏輯,爲其設置最大值爲內核容許的最大值,即 2^18=262144 。

經過這次修改,Kubelet 使用 systemd 做爲 cgroups 驅動時,能正常的處理 CPU 核數大於 512 的機器(若是使用 cgroupfs 做爲 cgroup 驅動的話,一直均可以,由於內核會直接進行處理)

有關 Linux 內核 CFS 相關內容,能夠參考我以前寫的文章 Docker 容器資源管理


歡迎訂閱個人文章公衆號【MoeLove】

TheMoeLove

相關文章
相關標籤/搜索