1. 程式人生 > 其它 >Kubernetes-Service介紹-服務發現

Kubernetes-Service介紹-服務發現

前言

本篇是Kubernetes第九篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。

Kubernetes系列文章:
  1. Kubernetes介紹
  2. Kubernetes環境搭建
  3. Kubernetes-kubectl介紹
  4. Kubernetes-Pod介紹(-)
  5. Kubernetes-Pod介紹(二)-生命週期
  6. Kubernetes-Pod介紹(三)-Pod排程
  7. Kubernetes-Pod介紹(四)-Deployment
  8. Kubernetes-Service介紹(一)-基本概念

服務發現

Kubernetes提供兩種客戶端以固定方式獲取後端訪問地址的方式:環境變數和DNS方式。

環境變數

該實驗以上文中的nginx-deployment.yaml和nginx-service.yaml為基礎;

  1. 新建一個Pod資源,檔名為nginx-pod.yaml;
apiVersion:v1
kind:Pod
metadata:
name:nginx-deployment
spec:
containers:
-name:nginx
image:nginx:latest
resources:
limits:
memory:"128Mi"
cpu:"500m"
ports:
-containerPort:80
  1. 啟動該資源;
kubectlapply-fnginx-pod.yaml
  1. 進入容器內部,檢視系統的環境變數;
#進入容器內部
kubectlexec-itnginx-deployment--/bin/bash
#檢視環境變數
env|grepNGINX
image.png
  1. 通過環境變數訪問服務資訊;
curlhttp://${NGINX_SERVICE_SERVICE_HOST}
image.png
DNS方式
  1. 通過DNS解析方式在容器內部訪問;
curlhttp://nginx-service.default.svc.cluster.local
image.png

相比於環境變數來說,DNS域名格式的Service名稱提供的穩定、不變的訪問地址,可以簡化客戶端的應用配置,是Kubernetes推薦的方式。當Service以DNS形式進行訪問的時候,需要在叢集中存在一個DNS伺服器來完成域名到ClusterIP的地址解析工作,kubeadm在初始化的時候已經完kube-dns的安裝,這個裡要注意一個問題,就是使用busybox解析Service時候,最新版本是有問題的,我採用了1.28.3版本,對於服務中心中是否安裝kube-dns可以通過以下方式檢查:

#檢查deployment
kubectlgetdeployment--namespace=kube-system
#檢查service
kubectlgetservices--namespace=kube-system

Service在Kubernetes中遵守DNS命名規範,Service的DNS域名錶示方法為servicename.namespace.svc.clusterdomain,其中servicename為服務名稱,namespace為所在的名空間,clusterdomain為Kubernetes中叢集設定的域名字尾,此外如果Service定義中設定了名稱,該埠會擁有一個DNS域名,在DNS伺服器中儲存格式為:_portname._protocol.servicename.namespace.svc.clusterdomain,其值為埠號的數值。

img

Pod的DNS相關特徵

Pod作為叢集中提供服務的實體,也可以設定DNS域名,Kubernetes為Pod使用的DNS策略提供很多種方式。

Pod的DNS

對於Pod來說,Kubernetes會為其設定一個pod-ip.namespace.pod.cluster-domain格式的DNS域名,其中Pod的IP需要使用-替換.,我們通過nslookup來證明一下;

  1. 檢視Pod的IP資訊,我們使用niginx-deployment的Pod為案例;
kubectlgetpod-owide
image.png
  1. 使用nslookup進行驗證;
kubectlexecbusybox--nslookup10-100-1-103.default.pod.cluster.local
image.png

對於Deployment和Daement型別的建立的Pod來說,Kubernetes會為每個Pod設定一個DNS域名,格式為pod-ip.deployment-name/daement-name.namespace.svc.cluster-domain,Pod的IP也需要使用-替換.

為Pod設定hostname和subdomain

當前,建立Pod時其主機名取自Pod的metadata.name,在定義Pod的yaml檔案中包含一個可選的 hostname 欄位,可以用來指定Pod的主機名。 當這個欄位被設定時,它將優先於Pod的名字成為該 Pod 的主機名。此外還有一個欄位subdomain 欄位,可以用來指定 Pod的子域名。

  1. 刪除所有Pod;
kubectldelete-fnginx-pod.yaml
  1. 建立busybox-headless-service.yaml檔案,這裡Headless Service與Pod子域名保持一致,這樣子DNS伺服器才會自動建立響應的DNS記錄;
apiVersion:v1
kind:Service
metadata:
name:default-subdomain
spec:
selector:
name:busybox
clusterIP:None
ports:
-name:foo#實際上不需要指定埠號
port:1234
targetPort:1234
  1. 建立nginx-pod.yaml檔案;
apiVersion:v1
kind:Pod
metadata:
name:busybox1
labels:
name:busybox
spec:
hostname:busybox-1
subdomain:default-subdomain
containers:
-image:busybox:1.28.3
command:
-sleep
-"3600"
name:busybox
  1. 建立資源;
kubectlapply-fbusybox-headless-service.yaml
kubectlapply-fbusybox-pod1.yaml
  1. 進入Pod檢查DNS是否寫入,其他Pod就可以通過busybox-1.default-subdomain.default.svc.cluster.local來訪問該Pod;
kubectlexec-itbusybox1--/bin/sh
cat/etc/hosts
image.png
Pod的DNS策略

Kubernetes可以通過Pod中dnsPolicy屬性指定DNS相關策略,目前支援以下四種策略:

  1. Default: 繼承Pod所在的節點的域名解析設定;

  2. ClusterFirst: 優先使用Kubernetes提供的DNS服務(CoreDNS),將無法解析域名轉發到系統配置的DNS伺服器;

  3. ClusterFirstWithHostNet:適用於以hostNetWork方式執行的Pod;

  4. None:忽略Kubernetes提供的DNS配置,採用自定義的配置方式;

Pod自定義DNS配置

Kubernetes可以通過Pod的dnsConfig屬性來自定義DNS相關配置,同時必須指定dnsPolicy為None。

自定義DNS可以在dnsConfig指定以下屬性:

nameservers: 用於域名解析DNS服務列表,最多可以設定3個,當 Pod的dnsPolicy設定為none時, 列表必須至少包含一個 IP 地址。配置的nameserver列表與系統自動設定的nameserver自動合併去重;

searches: 用於域名搜尋的DNS域名字尾,最多設定6個,也會與系統自動設定的search列表合併去重;

options:配置其他可選的DNS引數,以name或者name/value的形式表示,系統也會自動設定option列表合併去重;

隨筆分類 - DevOps

12下一頁

Kubernetes-API Server 摘要:前言 本篇是Kubernetes第十四篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建Kubernetes-kubectl介紹Kubernetes-Pod介紹(-)Kubernetes-Pod介紹(二)閱讀全文 posted @2021-12-22 09:00大魔王先生閱讀(130)評論(0)推薦(0)編輯 Kubernetes-儲存(二) 摘要:前言 本篇是Kubernetes第十三篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建Kubernetes-kubectl介紹Kubernetes-Pod介紹(-)Kubernetes-Pod介紹(二)閱讀全文 posted @2021-12-15 08:58大魔王先生閱讀(274)評論(0)推薦(1)編輯 Kubernetes-儲存(一) 摘要:前言 本篇是Kubernetes第十二篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建Kubernetes-kubectl介紹Kubernetes-Pod介紹(-)Kubernetes-Pod介紹(二)閱讀全文 posted @2021-12-06 08:59大魔王先生閱讀(222)評論(2)推薦(1)編輯 Kubernetes-網路 摘要:前言 本篇是Kubernetes第十一篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰,此篇文章概念比較多,後續我會繼續出一些網路相關實戰以及原理探索篇。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建Kubernetes-kubectl介紹Kuber閱讀全文 posted @2021-12-01 08:59大魔王先生閱讀(282)評論(2)推薦(0)編輯 Docker Swarm介紹 摘要:前言 本篇是Docker第十三篇,Docker的使用至此就介紹完成,接下來繼續Kubernetes。 Docker系列文章: 為什麼要學習DockerDocker基本概念Docker映象基本原理Docker容器資料卷DockerfileDocker單機網路上Docker單機網路下Docker單機網路閱讀全文 posted @2021-11-26 08:58大魔王先生閱讀(414)評論(0)推薦(1)編輯 Docker多機網路 摘要:前言 前面的文章主要聚焦於單機網路上,對於生產環境而言,單機環境不滿足高可用的特點,所以是不具備上生產的條件,因此在開始Docker Swarm篇的時候我們先來聊聊多機網路之間Docker的通訊如何做,廈門主要介紹三種跨主機通訊的方式。 Docker系列文章: 為什麼要學習DockerDocker基閱讀全文 posted @2021-11-12 08:54大魔王先生閱讀(297)評論(0)推薦(1)編輯 Netfilter和iptables介紹 摘要:前言 在開始Kubernetes的網路之前我們先來學習Netfilter,Netfilter可能瞭解的人比較少,但是iptables用過 Linux的都應該知道。本文主要介紹Netfilter與iptables的原理。 什麼是Netfilter Netfilter顧名思義就是網路過濾器,其主要功能就閱讀全文 posted @2021-11-04 08:53大魔王先生閱讀(170)評論(0)推薦(0)編輯 Kubernetes-Service介紹(三)-Ingress(含最新版安裝踩坑實踐) 摘要:前言 本篇是Kubernetes第十篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建Kubernetes-kubectl介紹Kubernetes-Pod介紹(-)Kubernetes-Pod介紹(二)-閱讀全文 posted @2021-10-20 08:52大魔王先生閱讀(850)評論(3)推薦(1)編輯 Kubernetes-Service介紹(二)-服務發現 摘要:前言 本篇是Kubernetes第九篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建Kubernetes-kubectl介紹Kubernetes-Pod介紹(-)Kubernetes-Pod介紹(二)-閱讀全文 posted @2021-10-18 09:19大魔王先生閱讀(220)評論(5)推薦(0)編輯 Kubernetes-Service介紹(一)-基本概念 摘要:前言 本篇是Kubernetes第八篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。Pod篇暫時應該還缺少兩篇,等Service和儲存相關內容介紹以後,補充剩下的兩篇,有狀態的Pod會涉及這兩塊的內容。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建閱讀全文 posted @2021-09-29 08:48大魔王先生閱讀(396)評論(0)推薦(0)編輯 Kubernetes-Pod介紹(四)-Deployment 摘要:前言 本篇是Kubernetes第七篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建Kubernetes-kubectl介紹Kubernetes-Pod介紹(-)Kubernetes-Pod介紹(二)-閱讀全文 posted @2021-09-26 08:54大魔王先生閱讀(212)評論(0)推薦(0)編輯 Kubernetes-Pod介紹(三)-Pod排程 摘要:前言 本篇是Kubernetes第六篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建Kubernetes-kubectl介紹Kubernetes-Pod介紹(-)Kubernetes-Pod介紹(二)-閱讀全文 posted @2021-09-22 08:49大魔王先生閱讀(267)評論(0)推薦(0)編輯 Kubernetes-Pod介紹(二)-生命週期 摘要:前言 本篇是Kubernetes第五篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建Kubernetes-kubectl介紹Kubernetes-Pod介紹(-) Pod生命週期 Pod物件自從其建立開閱讀全文 posted @2021-09-15 08:42大魔王先生閱讀(196)評論(0)推薦(0)編輯 Kubernetes-Pod介紹(-) 摘要:前言 本篇是Kubernetes第四篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。從現在開始都是重要的核心概念,此篇偏一些Pod的概念介紹,後續每篇都會有實戰。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建Kubernetes-kubectl介紹閱讀全文 posted @2021-09-08 08:39大魔王先生閱讀(229)評論(0)推薦(0)編輯 Kubernetes-kubectl介紹 摘要:前言 本篇是Kubernetes第三篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。本篇重要介紹kubectl的使用。 Kubernetes系列文章: Kubernetes介紹Kubernetes環境搭建 kubectl的核心功能在於通過 API Server 操作 Kubernetes閱讀全文 posted @2021-09-06 08:50大魔王先生閱讀(321)評論(0)推薦(0)編輯 Kubernetes環境搭建 摘要:前言 本篇是Kubernetes第二篇,大家一定要把環境搭建起來,看是解決不了問題的,必須實戰。 Kubernetes系列文章: Kubernetes介紹 Kubernetes搭建方式介紹和對比 Minikube Minikube是一種可以在本地輕鬆執行Kubernetes的工具。Minikube在閱讀全文 posted @2021-09-02 08:47大魔王先生閱讀(543)評論(0)推薦(3)編輯 Kubernetes介紹 摘要:前言 從本週開始以後嘗試開始每週兩更,本篇原計劃是Docker多機網路,該篇文章有些卡文,所以先更新篇Kubernetes文章,關於Docker系列文章後面應該就剩下兩篇了,等後續Kubernetes使用篇講完以後,再開始做一些Docker相關深層次思考。 Docker系列文章: 為什麼要學習Doc閱讀全文 posted @2021-08-18 08:47大魔王先生閱讀(460)評論(0)推薦(0)編輯 Docker Compose 摘要:前言 Docker系列文章: 此篇是Docker系列的第十一篇,大家一定要按照我做的Demo都手敲一遍,印象會更加深刻的,馬上就開始Kubernetes,加油!一起前行! 為什麼要學習DockerDocker基本概念Docker映象基本原理Docker容器資料卷DockerfileDocker單機網閱讀全文 posted @2021-08-12 08:49大魔王先生閱讀(797)評論(0)推薦(0)編輯 Docker限制 摘要:前言 Docker系列文章: 此篇是Docker系列的第十篇,大家一定要按照我做的Demo都手敲一遍,印象會更加深刻的,馬上就開始Kubernetes,加油!一起前行! 為什麼要學習DockerDocker基本概念Docker映象基本原理Docker容器資料卷DockerfileDocker單機網路閱讀全文 posted @2021-08-06 08:56大魔王先生閱讀(476)評論(0)推薦(2)編輯 Docker隔離技術 摘要:前言 Docker系列文章: 此篇是Docker系列的第九篇,之前的文章裡面或多或少的提到Docker的隔離技術,但是沒有很清楚的去聊這個技術,但是經過這麼多文章大家一定對Docker使用和概念有了一定的理解,接下來我們聊下底層一些技術,幫助大家解解惑,先從隔離技術開始吧。此外大家一定要按照我做的D閱讀全文 posted @2021-07-30 09:23大魔王先生閱讀(761)評論(0)推薦(0)編輯 Docker單機網路實戰 摘要:前言 Docker系列文章: 此篇是Docker系列的第八篇,大家一定要按照我做的Demo都手敲一遍,印象會更加深刻的,加油! 為什麼要學習DockerDocker基本概念Docker映象基本原理Docker容器資料卷DockerfileDocker單機網路上Docker單機網路下 基本命令 img閱讀全文 posted @2021-07-21 08:50大魔王先生閱讀(430)評論(2)推薦(1)編輯 Docker單機網路下 摘要:前言 Docker系列文章: 此篇是Docker系列的第七篇,大家一定要按照我做的Demo都手敲一遍,印象會更加深刻的,加油! 為什麼要學習DockerDocker基本概念Docker映象基本原理Docker容器資料卷DockerfileDocker單機網路上 Docker網路初探 後臺方式啟動一個閱讀全文 posted @2021-07-13 08:48大魔王先生閱讀(557)評論(6)推薦(4)編輯 Docker單機網路上 摘要:前言 Docker系列文章: 此篇是Docker系列的第六篇,大家一定要按照我做的Demo都手敲一遍,印象會更加深刻的,加油! 為什麼要學習DockerDocker基本概念Docker映象基本原理Docker容器資料卷Dockerfile 網絡卡 網絡卡是一塊計算機硬體。其特點是每一個網絡卡都有獨立的MA閱讀全文 posted @2021-07-09 08:55大魔王先生閱讀(335)評論(2)推薦(1)編輯 Dockerfile 摘要:前言 Docker系列文章: 此篇是Docker系列的第五篇,大家一定要按照我做的Demo都手敲一遍,印象會更加深刻的,加油! 為什麼要學習Docker Docker基本概念 Docker映象基本原理 Docker容器資料卷 什麼是DockerFile Dockfile是一種被Docker程式解釋的閱讀全文 posted @2021-06-28 08:47大魔王先生閱讀(183)評論(0)推薦(0)編輯 Docker容器資料卷 摘要:前言 Docker系列文章: 此篇是Docker系列的第四篇,大家一定要按照我做的Demo都手敲一遍,印象會更加深刻的,加油! 為什麼要學習Docker Docker基本概念 Docker映象基本原理 為什麼需要容器資料卷 資料的持久化,假設MySQL的資料儲存在自身的映象當中,如果將映象刪除的話,閱讀全文 posted @2021-06-21 09:26大魔王先生閱讀(415)評論(0)推薦(0)編輯 Docker映象基本原理 摘要:前言 Docker系列文章: 如果沒有安裝過Docker請參考本文最後部分,大家從現在開始一定要按照我做的Demo都手敲一遍,印象會更加深刻的,加油! 為什麼學習Docker Docker基本概念 什麼是映象 映象就是一個可執行獨立執行的軟體包。包含應用執行所必須的檔案和依賴包; 映象可以理解為類或閱讀全文 posted @2021-06-15 08:48大魔王先生閱讀(738)評論(1)推薦(1)編輯 Docker基本概念介紹 摘要:前言 Docker和Kubernetes是我最近在學習的內容,本來是去年的目標,由於工作比較忙,沒有時間去學習,今年剩下的半年時間我會好好系統學習下相關的內容,最後在學習下Devops相關理念,希望最終能形成自己的一套思想; Docker系列文章: 為什麼要學習Docker Docker基本組成 鏡閱讀全文 posted @2021-06-09 12:06大魔王先生閱讀(567)評論(0)推薦(2)編輯 3W法則-學習Docker 摘要:一、前言 5W1H法則是在一次面試中學習到的,後來在工作也開始使用這種東西,雖然最後沒去那家公司,但是也是學習到了,關注開這些東西以後,也發現了一些簡化版的3W法則,最近公司也要搞Docekr,所以寫篇部落格來說說為什麼要學習Docker。 二、What Docker 什麼是Docker?Docker閱讀全文 posted @2019-06-21 08:42大魔王先生閱讀(1317)評論(1)推薦(0)編輯 作者:Leo_wl     出處:http://www.cnblogs.com/Leo_wl/     本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。 版權資訊