k8s之Service資源

2020-09-19 程式設計師面試吧

Service資源是為動態管理的Pod對象添加一個固定訪問入口。

Service為四層調度器

service通過標籤選擇器關聯至擁有相關標籤的Pod對象

客戶端向Service進行請求,而非目標Pod對象,當Service資源變動時,有kube-proxy控制器將規則應用至本機iptables或者ipvs規則。

而kube-proxy為DaemonSet 控制器將會在集群中每個節點運行一個Pod或者守護進程 如果需要轉換ipvs規則,則需要手動加載ipvs模塊進入內核

iptables代理模式,對於每個Service對象,kube-proxy會創建iptables規則直接捕獲到達cluster ip和Port流量,並將其重定向至當前Service對象的後端Pod資源,對於每個Endpoint對象,Service資源會為其創建iptables規則並關聯

ipvs代理模式 kube-proxy跟蹤API server上 Service和Endpoints(ip+port)對象變動,來調用netlink接口創建ipvs規則,並確保於API server中變動同步,於iptables規則不同之處僅在處於其請求流量的調度功能有ipvs實現,餘下的其他功仍然由iptables完成

servcie資源定義:

[root@node1 ~]ports欄位定義svc埠與後端哪個埠相關連  - name: http svc埠    targetPort: 80自定義nodePort埠  selector:NodePort可以定義一個埠給外部範圍 kubectl get svcNAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGEkubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        2d5hmyweb        NodePort    10.100.112.31   <none>        80:30593/TCP   2d1h[root@node1 chapter5] curl 10.105.226.215Hello MyApp | Version: v2 | <a href=&34;>Pod Name</a>[root@node1 chapter5] vim ingress-svc.yml              apiVersion: v1kind: Servicemetadata:  name: ingress  namespace: ingress-nginxspec:  selector:    app.kubernetes.io/name: ingress-nginx    app.kubernetes.io/part-of: ingress-nginx  ports:  - name: http    port: 80  - name: https    port: 443  type: NodePort

部署svc使其外部網絡能夠訪問至ingress

創建後端pod,並為pod指定svc資源

[root@node1 ~]資源類型metadata: 此欄位為資源註解,作為配置信息提供方    kubernetes.io/ingress.class: &34;spec: 定義後端主機  - http: 定義後端資源      paths:      - path: / 後端資源          serviceName: myapp 此為svc埠

創建成功,會自動關聯至myapp此svc,且會綁定後端資源

此時直接訪問宿主機即可訪問後端資源

使用https訪問

openssl genrsa -out myapp.key 2048 生成私鑰openssl req -new -x509 -key myapp.key -out myapp.crt -subj /C=CN/ST=Beijing/L=Beijing/O=ops/CN=www.node.com -days 365  kubectl create secret tls ilinux-cert -n myns --cert=myapp.crt --key=myapp.keysecret/ilinux-cert created 34;nginx&引用證書  - hosts: secre資源的名稱。就是我們剛才創建的k8s資源  rules: [root@node1 ~]#連接至pod內容器,配置文件會自動填充我們定義的ingress的配置

原文來自:http://dwz.date/caJN
作者: woaiyitiaochai

相關焦點

  • 容器編排系統k8s之Service資源
    Service資源在k8s上主要用來解決pod訪問問題;我們知道在k8s上pod由於各種原因重建,對於重建後的podip地址和名稱都是變化的,這樣一來使得我們訪問pod就變得有些不便;為了解決pod訪問能有一個固定的端點,在k8s上就是用service來解決的;簡單來講,service對象就是工作在節點上的一組iptables或ipvs規則,用於將到達service對象ip
  • k8s重器之Service
    Service是k8s的核心,通過創建Service,可以為一組具有相同功能的容器應用提供一個統一的入口地址,並將請求進行負載分發到各個容器應用上。sessionAffinity: string #是否支持session,可選值為ClientIP,表示同一個客戶端 ports: - name: string protocol: string #埠協議,支持TCP、UDP,默認是TCP port: int #宿主機埠 targetPort: int #目標Pod的埠 nodePort: int #k8s
  • K8S中的Service的存在理由
    ServiceService資源用於為pod對象提供一個固定、統一的訪問接口及負載均衡的能力,並藉助新一代DNS系統的服務發現功能,解決客戶端發現並訪問容器化應用的問題。注意:service只是在k8s集群內部起作用,集群外部訪問是無效的實現原理Service通過關註定義出多個POD對象組合而成的邏輯集合,以及訪問這組POD的策略,Service關聯POD需要標籤選擇器完成,其基於標籤選擇器將一組POD定義成一個邏輯集合,並通過自己的IP位址和埠調度代理請求至後端POD之上。
  • K8S中的Service的存在理由
    注意:service只是在k8s集群內部起作用,集群外部訪問是無效的實現原理Service通過關註定義出多個POD對象組合而成的邏輯集合,以及訪問這組POD的策略,Service關聯POD對象的IP位址稱為cluster IP,位於K8S集群配置指定的專用IP位址範圍內,其是一種虛擬IP位址,其在service對象創建後保持不變,並且能夠被同一集群中的POD資源訪問,service埠接受客戶端的請求並將其轉發至後端POD中的相應埠,因此,其又被稱為四層代理,因其工作在TCP/IP層。
  • 每天5分鐘|輕鬆掌握開發工作必會的k8s-service的介紹和基本操作
    service的創建和deployment等資源的創建方式一樣,只需要在yaml中定義service的相關屬性,並執行相應的命令運行這個配置即可。我們在yaml中定義Serive的時候,需要指定spec.type欄位,分別為以下四個選項:1、ClusterIP。
  • 初識K8S之理論和搭建
    一、什麼是k8sk8s是分布式系統集中式管理。它可以看作是一個分布式系統支撐平臺。二、為什麼要用k8s,它有什麼好處1、 開發人員發布的是鏡像,鏡像裡面是包括環境和包括代碼。所以說本地和線上的運行環境是一樣的。不會存在本地可以。
  • 每天5分鐘|輕鬆掌握開發工作必會的k8s-命令行操作k8s太麻煩?
    前面幾篇中,查看和操作k8s的資源都是通過命令行操作,每次查詢一個資源的狀態都需要手動執行命令。這種方式。。。。多少有點。。。。。不方便。而且,k8s不光面向運維,有時候開發也需要關注集群中某些服務的狀態,做一些簡單的配置。
  • 《蹲坑學K8S》之22-2:Kubernetes授權機制
    RBAC引入了4個新的頂級資源對象:Role、ClusterRole、RoleBinding、ClusterRoleBinding。同其他API資源對象一樣,用戶可以使用kubectl或者API調用等方式操作這些資源對象。
  • 《蹲坑學K8S》之19-3:Flannel通信原理
    本章節主要學習Flannel網絡是如何通信,從而深刻理解從內部到外部,從外部到內部的資源訪問。一、container-container通信原理解析這種場景對於Kubernetes來說沒有任何問題,根據Kubernetes的架構設計。
  • 《蹲坑學K8S》之19-3:Flannel通信原理
    本章節主要學習Flannel網絡是如何通信,從而深刻理解從內部到外部,從外部到內部的資源訪問。-1中Pod運行狀態(2)查看k8s-node-1的IP位址以及路由Service是一組邏輯pod的抽象概念,分配一個虛擬網絡,為一組pod提供統一入口,用戶只需與service打交道,service提供DNS解析名稱,負責追蹤pod動態變化並更新轉發表,通過負載均衡算法最終將流量轉發到後端的pod。創建一個service時,相應會創建一個指向這個service的域名,域名規則為{服務名}.{namespace}.svc.{集群名稱}。
  • 乾貨|帶您了解k8s
    Docker的第二類編排工具:mesos:它不是docker的編排工具,而是資源分配工具。所以mesos必須要依賴於容器編排框架marathon。Docker的第三類編排工具:kubernetes(簡稱k8s):這個容器編排工具佔用了80%的市場份額。
  • 深入解析Kubernetes service 概念
    一旦有service資源發生變動(增刪改查)kube-proxy可以及時轉化為能夠調度到後端Pod節點上的規則,這個規則可以是iptables也可以是ipvs,取決於service實現方式Kubernetes 三大IPNode Network 節點網絡 節點網絡地址是配置在節點網絡之上Pod Network
  • 14 - MLSQL on k8s(2) - Spark on k8s
    (KubernetesDriverBuilder.scala:58) at org.apache.spark.deploy.k8s.submit.Client.run(KubernetesClientApplication.scala:100) at org.apache.spark.deploy.k8s.submit.KubernetesClientApplication.
  • 跟我一起學k8s(三)深入理解k8s資源
    作者:DevOps旭來自:DevOps探路者一、什麼是k8s資源在運維管理k8s時,管理員習慣將k8s中的一切稱為資源,比如pod、deployment、service等等,k8s通過對這些資源進行維護,調度,從而實現了整個集群的管理二、認識podpod是kubernetes內的最小管理單元,可以對一組容器提供管理。
  • 「Kubernetes」第六章:service
    資源控制器的缺陷,就是比如有的pod死掉了,再重建之後,裡面的ip會改變,這個過程會影響別的程序使用。SVC的作用就是可以監測到這種改變,它也是通過標籤選擇匹配到一組pod。有四種方式,clusterip,nodeport和LB這種服務是對內部的。在實際生產環境中,可能有不同的service需求,比如業務一個,管理一個等。k8s需要一種管理服務的服務。
  • k8s快速通關秘籍(1)
    k8s越來越流行,已經成為容器管理與調度編排的首選平臺和事實標準,開發,測試,運維等技術人員,需要快速的學習和掌握k8s相關知識,通關秘籍系列就從k8s架構和組件,k8s的安裝部署,k8s的日常運維等方面介紹k8s,使零基礎的小白技術人員,迅速拿到k8s的通關秘籍。
  • 詳解k8s原生集群監控方案Heapster+InfluxDB
    1、淺析監控方案heapster是一個監控計算、存儲、網絡等集群資源的工具,以k8s內置的cAdvisor作為數據源收集集群信息,並匯總出有價值的性能數據(Metrics):cpu、內存、network、filesystem等,然後將這些數據輸出到外部存儲
  • 記一次Gitlab-CI集成K8S實錄
    : gitlab-adminnamespace: kube-system[root@wenqy gitlab]# kubectl apply -f gitlab-admin-service-account.yamlserviceaccount/gitlab-admin createdclusterrolebinding.rbac.authorization.k8s.io
  • k8s集群構建:官方推薦之KubeAdm安裝
    前面文章介紹了rancher安裝k8s集群方式,詳情參見()。本文將介紹官方推薦方式:kubeAdm安裝k8s集群。集群機器- 192.168.0.114 : master01節點。注意master節點CPU至少分配2核。
  • 「Kubernetes」第六章:service-ingress
    第一步:創建各個部署文件這個yaml包含了很多資源的創建,包括名稱空間,configmap,role,serviceaccout等。kind: Role name: nginx-ingress-rolesubjects: - kind: ServiceAccount name: nginx-ingress-serviceaccount namespace: ingress-nginx---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata