主頁 > 軟體工程 > Kubernetes筆記(6) - Service和Ingress

Kubernetes筆記(6) - Service和Ingress

2021-06-09 19:08:44 軟體工程

  • Service資源概述
    • 創建Service資源
    • 向Service物件請求服務
    • Service會話粘性
    • 服務發現
    • 服務暴露
  • Ingress和Ingress Controller
    • Ingress資源
    • Ingress控制器

Service資源概述

Service是Kubernetes的核心資源型別之一,它通過規則定義出由多個Pod物件組合而成的邏輯集合,以及訪問這組Pod的策略,
由Deployment等控制器管理的Pod物件在中斷或擴縮容后,Pod組合的IP地址都會發生變化,而引入Service資源后,就可以基于標簽選擇器將一組Pod定義成一個邏輯組合,并通過自己的IP地址和埠調度代理請求至組內的Pod物件之上,它向客戶端隱藏了真實的、處理用戶請求的Pod資源,使得客戶端的請求看上去就像是由Service直接處理并進行回應的一樣,而且Service與Pod物件之間通過標簽選擇器以松耦合的方式關聯,它可以先于Pod物件創建而不會發生錯誤,

創建Service資源

Service資源基本的配置清單:

apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
spec:
  selector:
    app: myapp  
  ports:
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP

Service資源myapp-svc通過標簽選擇器關聯至標簽為“app=myapp”的各Pod物件,它會自動創建名為myapp-svc的Endpoints資源物件,并自動配置一個ClusterIP,暴露的埠由port欄位進行指定,后端各Pod物件的埠則由targetPort給出,
分別查看service和endpoint的狀態:

kubectl get svc myapp-svc
kubectl get endpoints myapp-svc

向Service物件請求服務

Service資源的默認型別為ClusterIP,它僅能接收來自于集群中的Pod物件中的客戶端程式的訪問請求,所以為了測驗,會創建一個專用的Pod物件,利用其互動式介面來訪問service資源,

kubectl run cirros-$RANDOM --rm -it --image=cirros -- sh

啟動了一個運行CirrOS容器的Pod,CirrOS是設計用來進行云計算環境測驗的Linux微型發行版,它自帶HTTP客戶端工具curl等,
在容器的互動式介面訪問ClusterIP:Port

/ # curl http://10.105.246.145:80
Hello MyApp | Version: v1 | <a href="https://www.cnblogs.com/zhixin9001/p/hostname.html">Pod Name</a>

Kubernetes集群默認的Service代理模式為iptables,而且使用隨機調度演算法,因此Service會將客戶端請求隨機調度至與其關聯的某個后端Pod資源上,

Service會話粘性

Service資源還支持Session affinity(會話粘性)機制,它能夠將來自同一個客戶端的請求始終轉發至同一個后端的Pod物件,適用于需要基于客戶端身份保存某些私有資訊,并根據這些私有資訊追蹤用戶的活動等一類的需求,
Service資源通過spec.sessionAffinity和spec.sessionAffinityConfig兩個欄位配置粘性會話:

  • sessionAffinity欄位用于定義要使用的粘性會話的型別,它僅支持使用“None”和“ClientIP”兩種屬性值,?
    • None:不使用sessionAffinity,默認值,?
    • ClientIP:基于客戶端IP地址識別客戶端身份,把來自同一個源IP地址的請求始終調度至同一個Pod物件,
  • sessionAffinityConfig用于配置其會話保持的時長,其可用的時長范圍為“1~86400”,默認為10800秒

但是Service資源的Session affinity機制僅能基于客戶端IP地址識別客戶端身份,它會把經由同一個NAT服務器進行源地址轉換的所有客戶端識別為同一個客戶端,調度粒度粗糙且效果不佳,因此實踐中并不推薦使用此種方法實作粘性會話,

服務發現

Service為Pod中的服務類應用提供了一個穩定的訪問入口,但Pod客戶端中的應用如何得知某個特定Service資源的IP和埠呢,這就需要借助服務發現機制來進行,
服務發現機制的基本實作,一般是事先部署好一個網路位置較為穩定的服務注冊中心(也稱為服務總線),服務提供者(服務端)向注冊中心注冊自己的位置資訊,并在變動后及時予以更新,服務消費者則周期性地從注冊中心獲取服務提供者的最新位置資訊從而“發現”要訪問的目標服務資源,
在K8S中可以基于CoreDNS進行服務發現,甚至也可以使用簡單的環境變數方式,

服務暴露

Service的IP地址默認僅在集群內可達,集群外部想訪問服務,需要首先進行服務的暴露,

Service的型別

Service有四種類似ClusterIP、NodePort、LoadBalancer和ExternalName

  1. ClusterIP:通過集群內部IP地址暴露服務,此地址僅在集群內部可達,而無法被集群外部的客戶端訪問;
  2. NodePort:建立在ClusterIP型別之上,其在每個Node的IP地址的某靜態埠(NodePort)暴露服務,NodePort的路由目標為ClusterIP,簡單來說,NodePort型別就是在作業節點的IP地址上選擇一個埠用于將集群外部的用戶請求轉發至目標Service的ClusterIP和Port,這種型別的Service既可如ClusterIP一樣受到集群內部客戶端Pod的訪問,也會受到集群外部客戶端通過套接字NodeIP:NodePort進行的請求;
  3. LoadBalancer:建構在NodePort型別之上,其通過cloud provider提供的負載均衡器將服務暴露到集群外部,LoadBalancer型別的Service會指向關聯至Kubernetes集群外部的某個負載均衡設備,該設備通過作業節點之上的NodePort向集群內部發送請求流量,這種Service的優勢在于,能夠把來自于集群外部客戶端的請求調度至所有節點(或部分節點)的NodePort之上,而不是依賴于客戶端自行決定連接至哪個節點,從而避免了因客戶端指定的節點故障而導致的服務不可用;
  4. ExternalName:通過將Service映射至由externalName欄位的內容指定的主機名來暴露服務,此主機名需要被DNS服務決議至CNAME型別的記錄,這種型別并非定義由Kubernetes集群提供的服務,而是把集群外部的某服務以DNS CNAME記錄的方式映射到集群內,從而讓集群內的Pod資源能夠訪問外部的Service的一種實作方式,這種型別的Service沒有ClusterIP和NodePort,也沒有標簽選擇器用于選擇Pod資源,
NodePort

NodePort型的Service資源,其配置清單與前面默認的ClusterIP型別類似,只是要顯式地在spec下指定type: NodePort
此外還可以指定Node埠,但必須在30000-32767之間,而且推薦使用集群自動分配的埠以避免埠的沖突,

LoadBalancer

NodePort型別的Service資源雖然能夠于集群外部訪問得到,但外部客戶端必須得事先得知NodePort和集群中至少一個節點的IP地址,且選定的節點發生故障時,客戶端還得自行選擇請求訪問其他的節點,此外有時節點并不允許外界訪問,LoadBalancer型別可將請求流量調度至各節點的NodePort之上,
創建LoadBalancer型別需要指定type: LoadBalancer

ExternalName

ExternalName型別的Service資源用于將集群外部的服務發布到集群中以供Pod中的應用程式訪問,需要指定type: ExternalName和externalName,比如externalName: redis.ilinux.io,externalName屬性定義了一個CNAME記錄用于回傳外部真正提供服務的主機的別名,而后通過CNAME記錄值獲取到相關主機的IP地址,

spec:
  type: ExternalName
  externalName: redis.ilinux.io

服務創建后通過serviceName訪問相應的服務,ClusterDNS會將此名稱以CNAME格式決議為spec.externalName欄位中的名稱,而后通過DNS服務將其決議為相應的主機的IP地址,

Ingress和Ingress Controller

在Kubernetes中,Service資源和Pod資源的IP地址僅能用于集群網路內部的通信,所有的網路流量都無法穿透邊界路由器以實作集群內外通信,Kubernetes提供了兩種內建的云端負載均衡機制(cloud loadbalancing)用于發布公共應用:

  • 一種是作業于傳輸層的Service資源,它實作的是“TCP負載均衡器”,無論是iptables還是ipvs模型的Service資源都配置于Linux內核中的Netfilter之上進行四層調度,是一種型別更為通用的調度器,支持調度HTTP、MySQL等應用層服務,
    但由于作業于傳輸層而功能有局限,比如不支持基于URL的請求調度機制,而且Kubernetes也不支持為其配置任何型別的健康檢查,
  • 另一種便是Ingress資源,它實作的是“HTTP(S)負載均衡器”,屬于應用層負載均衡機制的一種,它提供了諸如可自定義URL映射和TLS卸載等功能,并支持多種型別的后端服務器健康狀態檢查機制,

Ingress是Kubernetes API的標準資源型別之一,它其實就是一組基于DNS名稱(host)或URL路徑把請求轉發至指定的Service資源的規則,用于將集群外部的請求流量轉發至集群內部完成服務發布,它僅是一組路由規則的集合,Ingress控制器根據這些規則來匹配并路由請求流量,

Ingress資源

Ingress資源是基于HTTP虛擬主機或URL的轉發規則,Ingress資源的定義方式舉例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations: 
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: www.ilinux.io
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: myapp-svc
              port: 
                number: 80


spec欄位下主要嵌套如下三個欄位

  • rules,用于定義當前Ingress資源的轉發規則串列;未由rules定義規則,或者沒有匹配到任何規則時,所有流量都會轉發到由backend定義的默認后端,?
  • backend,默認的后端用于服務那些沒有匹配到任何規則的請求;定義Ingress資源時,至少應該定義backend或rules兩者之一;此欄位用于讓負載均衡器指定一個全域默認的后端,backend物件的定義由兩個必選的內嵌欄位組成:serviceName和servicePort,分別用于指定流量轉發的后端目標Service資源的名稱和埠,?
  • tls,TLS配置,目前僅支持通過默認埠443提供服務;如果要配置指定的串列成員指向了不同的主機,則必須通過SNI TLS擴展機制來支持此功能,
Ingress資源型別
單Service資源型Ingress

暴露單個Service的方法可以使用NodePort、LoadBalancer,也可以使用Ingress來暴露服務,只需要為Ingress指定“default backend”,這樣Ingress控制器會為其分配一個IP地址接入請求流量,并將它們轉至指定的后段service,如:

spec:
  backend:
    serviceName: my-svc
    servicePort: 80
基于URL路徑進行流量分發

Ingress也支持基于URL路徑進行流量分發,如:

spec:
  rules:
  - host: www.ilinux.io
    http:
      paths:
        - path: /web
          backend:
            service:
              name: myapp-svc-web
              port: 
                number: 80
        - path: /api
          backend:
            service:
              name: myapp-svc-api
              port: 
                number: 80

上面定義的規則會將對www.ilinux.io/web的請求轉發到前端service myapp-svc-web,而將www.ilinux.io/api請求轉發到后段service myapp-svc-api,

基于主機名稱的虛擬主機

如果服務按照域名進行劃分,可以將Ingress基于虛擬主機定義如下:

spec:
  rules:
  - host: web.ilinux.io
    ...
  - host: api.ilinux.io
TLS型別的Ingress資源

如果需要以HTTPS發布Service資源,也可以配置TLS協議的Ingress資源,但需要基于一個含有私鑰和證書的Secret物件,這在后面的章節會涉及到,在Ingress資源中參考此Secret即可讓Ingress控制器加載并配置為HTTPS服務:

spec:
  tls:
  - secretName: ilinuxSecret
  backend:
    ...

Ingress控制器

Ingress控制器自身是運行于Pod中的容器應用,一般是Nginx或Envoy一類的具有代理及負載均衡功能的守護行程,它監視著來自于API Server的Ingress物件狀態,并以其規則生成相應的應用程式專有格式的組態檔并通過多載或重啟守護行程而使新配置生效,例如,對于Nginx來說,Ingress規則需要轉換為Nginx的配置資訊,
既然Ingress控制器實際上也是Pod資源,那么也需要接入外部流量,這可以使用NodePort或LoadBalancer型別的Service物件為其接入集群外部的請求流量;或者借助于DaemonSet控制器,將Ingress控制器的Pod資源各自以單一實體的方式運行于集群的所有或部分作業節點之上,并配置這類Pod物件以hostPort或hostNetwork的方式在當前節點接入外部流量,
以部署ingress-nginx并通過專用的Service接入流量為例:
首先apply在線的mandatory.yaml來部署ingress-nginx所需的全部資源,它們的namespace:為ingress-nginx:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.24.1/deploy/mandatory.yaml

然后定義專用的NodePort型Service資源,注意其selector要與nginx-ingress-controller的selector保持一致:

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: ingress-nginx
  ports:
  - port: 80
    name: http   
    nodePort: 30080
  - port: 443
    name: https   
    nodePort: 30443

然后就可以通過這個NodePort型Serviced的IP:30002訪問了,或者也可以根據ingress指定的host名稱配置etc/hosts,比如對于如下的ingress配置:

spec:
  rules:
  - host: tomcat.ilinux.io

sudo vim /etc/hosts,添加一行

127.0.0.1 tomcat.ilinux.io

然后也就可以通過tomcat.ilinux.io:30002訪問了,

學習資料

《Kubernetes實戰進階》 馬永亮著

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/285968.html

標籤:其他

上一篇:某資料庫管理軟體離線注冊分析

下一篇:實驗八 團隊作業5—團隊專案需求建模與系統設計(2)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more