Kind方式部署k8s單節點集群并創建nginx服務對外訪問

資源要求

請準備好doker環境,盡量用比較新的版本。我的docker環境如下
docker 環境: Docker version 20.10.21, build 20.10.21-0ubuntu1~18.04.3

安裝kind

kind表現上就是一個二進制程序,下載對應版本并增加執行權限即可:

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
chmod +x ./kind
mv ./kind /usr/bin/kind
kind version

如何通過kind新建k8s集群?

kubectl是與k8s交互的客戶端命令工具,因此需要先安裝此工具。

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client

使用config文件創建k8s集群

extraPortMappings:把K8s容器(相當于K8s所在的服務器)端口暴露出來,這里暴露了30000-30005,可以理解為把docker部署的k8s集群中的服務,通過docker服務將端口映射出來給到宿主機可以訪問。

kind-config.yaml

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:- role: control-planeextraPortMappings:- containerPort: 30000hostPort: 30000protocol: TCP- containerPort: 30001hostPort: 30001protocol: TCP- containerPort: 30002hostPort: 30002protocol: TCP- containerPort: 30003hostPort: 30003protocol: TCP- containerPort: 30004hostPort: 30004protocol: TCP- containerPort: 30005hostPort: 30005protocol: TCP

使用以下命令來創建集群

kind create cluster --name myk8s-01 --config kind-config.yaml
To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:kubeadm join myk8s-01-control-plane:6443 --token <value withheld> \--discovery-token-ca-cert-hash sha256:fc1aad44ac2b0d95ce17a0ed081a336768da10492f8091aeaf6ebfa060a55cf0 \--control-planeThen you can join any number of worker nodes by running the following on each as root:kubeadm join myk8s-01-control-plane:6443 --token <value withheld> \--discovery-token-ca-cert-hash sha256:fc1aad44ac2b0d95ce17a0ed081a336768da10492f8091aeaf6ebfa060a55cf0? Starting control-plane 🕹?? Installing CNI 🔌? Installing StorageClass 💾
Set kubectl context to "kind-myk8s-01"
You can now use your cluster with:kubectl cluster-info --context kind-myk8s-01Thanks for using kind! 😊
root@raypick:/home/raypick/k8s_resource/helen# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                                                             NAMES
6b1f30ea4d28   kindest/node:v1.21.1   "/usr/local/bin/entr…"   25 minutes ago   Up 25 minutes   0.0.0.0:30000-30005->30000-30005/tcp, 127.0.0.1:41957->6443/tcp   myk8s-01-control-plane
root@raypick:/home/raypick/k8s_resource/helen#

創建完成后正常會在宿主機的目錄下生成這個文件,/etc/kubernetes/admin.conf,如果沒有的話,docker cp,將容器集群中的
/etc/kubernetes/admin.conf文件拷貝出來到宿主機的/etc/kubernetes目錄下即可,但是記住拷貝的話需要修改修改其中的server為127.0.0.1,默認是docker網段中的ip地址

在這里插入圖片描述

執行以下命令,將k8s集群配置加載進環境變量中,之后即可開始后續的內容操作

export KUBECONFIG=/etc/kubernetes/admin.conf

創建資源進行測試

namespace.yaml

apiVersion: v1
kind: Namespace
metadata:name: helen

serviceaccount.yaml

apiVersion: v1
kind: ServiceAccount
metadata:name: sa-helennamespace: helen

role.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: role-helennamespace: helen
rules:
- apiGroups: [""]resources:- pods- pods/exec- pods/log- services- endpoints- configmaps- secrets- persistentvolumeclaims- serviceaccountsverbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]resources:- deployments- replicasets- statefulsets- daemonsetsverbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["batch"]resources:- jobs- cronjobsverbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

rolebinding.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: helen-sa-role-bindingnamespace: helen
subjects:
- kind: ServiceAccountname: sa-helennamespace: helen
roleRef:kind: Rolename: role-helenapiGroup: rbac.authorization.k8s.io

secret-helen.yaml

apiVersion: v1
kind: Secret
metadata:name: helen-secretnamespace: helen
type: Opaque
stringData:MYSQL_PASSWORD: mysql_passSFTP_PASSWORD: sftp_pass

nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentnamespace: helen
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:serviceAccountName: sa-helencontainers:- name: nginximage: nginxports:- containerPort: 80env:- name: MYSQL_PASSWORDvalueFrom:secretKeyRef:name: helen-secretkey: MYSQL_PASSWORD- name: SFTP_PASSWORDvalueFrom:secretKeyRef:name: helen-secretkey: SFTP_PASSWORD

service.yaml

apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: helen
spec:type: NodePortselector:app: nginxports:- protocol: TCPport: 80targetPort: 80nodePort: 30000  # 你也可以不指定,由系統自動分配

上面的文件依次apply后,即可將nginx服務啟動,并通過宿主機ip:30000/進行訪問nginx服務。這里的192.168.56.103是我虛擬機的ip

http://192.168.56.103:30000/
在這里插入圖片描述

使用 ServiceAccount 模擬 kubectl 操作

🔧 步驟 1:獲取該 ServiceAccount 的 Token

SECRET_NAME=$(kubectl get sa sa-helen -n helen -o jsonpath='{.secrets[0].name}')kubectl get secret $SECRET_NAME -n helen -o jsonpath='{.data.token}' | base64 -d > /tmp/sa-helen.token

📜 步驟 2:獲取當前集群的 CA 和 API Server 地址

# 獲取 CA
kubectl get secret $SECRET_NAME -n helen -o jsonpath='{.data.ca\.crt}' | base64 -d > /tmp/ca.crt# 獲取 API Server 地址
APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')

🧪 步驟 3:生成一個 kubeconfig 文件

cat <<EOF > /tmp/kubeconfig-sa-helen
apiVersion: v1
kind: Config
clusters:
- cluster:certificate-authority: /tmp/ca.crtserver: ${APISERVER}name: kind-cluster
contexts:
- context:cluster: kind-clusteruser: sa-helennamespace: helenname: sa-helen-context
current-context: sa-helen-context
users:
- name: sa-helenuser:token: $(cat /tmp/sa-helen.token)
EOF

? 步驟 4:使用這個 kubeconfig 來運行 kubectl

KUBECONFIG=/tmp/kubeconfig-sa-helen kubectl get pods
KUBECONFIG=/tmp/kubeconfig-sa-helen kubectl get secrets或者export KUBECONFIG=/tmp/kubeconfig-sa-helen

如果role-helen 中沒有對某資源的權限授權,這時候命令會失敗,提示 forbidden。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81833.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81833.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81833.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL備份恢復:數據安全的終極指南

引言 各位數據庫愛好者們好&#xff01;今天我們要深入探討MySQL數據庫的"生命保險"——備份與恢復策略 &#x1f6e1;?。在數據即資產的時代&#xff0c;任何數據丟失都可能造成災難性后果。本教程將帶你全面掌握從邏輯備份到物理備份&#xff0c;從二進制日志恢復…

id分頁遍歷數據漏行問題

令入參id為0 while(true){ select * from table where id>#{id} order by id asc limit 100; 取結果集中最大id作為下次查詢的入參 其他操作 } 這個算法一般沒問題&#xff0c;但在主從數據系統中&#xff0c;主庫寫&#xff0c;查詢從庫遍歷數據時&#xff0c;出現了…

OpenCV級聯分類器

概念 OpenCV 級聯分類器是一種基于 Haar 特征、AdaBoost 算法和級聯結構的目標檢測方法&#xff0c;通過多階段篩選快速排除非目標區域&#xff0c;實現高效實時檢測&#xff08;如人臉、行人等&#xff09;。 加載級聯分類器 // 加載級聯分類器CascadeClassifier cascade;// …

C++ inline 內聯函數

一、定義與設計初衷 inline 函數是 C 中通過 減少函數調用開銷 優化程序效率的機制。其核心設計初衷是 取代 C 語言中宏定義&#xff08;#define&#xff09;&#xff0c;同時解決宏的以下缺陷&#xff1a; 類型安全問題&#xff1a;宏僅進行文本替換&#xff0c;無法進行參數…

uniapp-商城-64-后臺 商品列表(商品修改---頁面跳轉,深淺copy應用,遞歸調用等)

完成了商品的添加和展示&#xff0c;下面的文字將繼續進行商品頁面的處理&#xff0c;主要為商品信息的修改的頁面以及后天邏輯的處理。 本文主要介紹了商品信息修改頁面的實現過程。首先&#xff0c;頁面布局包括編輯和刪除功能&#xff0c;未來還可添加上架和下架按鈕。通過c…

digitalworld.local: VENGEANCE靶場

1&#xff0c;將兩臺虛擬機網絡連接都改為NAT模式 2&#xff0c;攻擊機上做namp局域網掃描發現靶機 nmap -sn 192.168.23.0/24 那么攻擊機IP為192.168.23.182&#xff0c;靶場IP192.168.23.3 3&#xff0c;對靶機進行端口服務探測 nmap -sV -T4 -p- -A 192.168.23.3 端口號 協…

微店平臺店鋪商品接口開發指南

微店API獲取店鋪所有商品實現方案 以下是使用微店開放平臺API獲取店鋪所有商品的完整實現代碼&#xff0c;包含請求封裝、分頁處理和錯誤處理機制。 點擊獲取key和secret from weidian_api import WeidianAPI # 配置你的微店應用憑證 APP_KEY "your_app_key" APP_…

Proxmox 主機與虛擬機全部斷網問題排查與解決記錄

Proxmox 主機與虛擬機全部斷網問題排查與解決記錄 關鍵詞&#xff1a;Proxmox、e1000e、板載網卡、斷網、網絡橋接、Hardware Unit Hang、網卡掛死 背景 近期在使用 Proxmox VE 管理服務器時&#xff0c;遇到一個奇怪的問題&#xff1a;每當在某個虛擬機中執行某些操作&#x…

SpringBoot整合MQTT實戰:基于EMQX構建高可靠物聯網通信,從零到一實現設備云端雙向對話

一、引言 隨著物聯網(IoT)技術的快速發展&#xff0c;MQTT(Message Queuing Telemetry Transport)協議因其輕量級、低功耗和高效的特點&#xff0c;已成為物聯網設備通信的事實標準。本文將詳細介紹如何使用SpringBoot框架整合MQTT協議&#xff0c;基于開源MQTT代理EMQX實現設…

zData X zStorage 為什么采用全閃存架構而非混閃架構?

點擊藍字 關注我們 最近有用戶問到 zData X 的存儲底座 zStorage 分布式存儲為什么采用的是全閃存架構而非混閃架構&#xff1f;主要原因還是在于全閃存架構在性能和可靠性方面具有更顯著的優勢。zData X 的上一代產品 zData 的早期版本也使用了SSD盤作為緩存的技術架構&#x…

Fiddler抓包教程->HTTP和HTTPS基礎知識

1.簡介 有的伙伴可能會好奇&#xff0c;不是講解和分享抓包工具,怎么這里開始講解HTTP和HTTPS協議了。這是因為你對HTTP協議越了解&#xff0c;你就能越掌握Fiddler的使用方法&#xff0c;反過來你越使用Fiddler&#xff0c;就越能幫助你了解HTTP協議。 Fiddler無論對開發人員…

虛擬機NAT模式獲取不到ip

虛擬機NAT模式獲取不到ip 如圖所示 解決方案&#xff1a; 先查看NetworkManager是否啟動 systemctl status NetworkManager如果沒啟動就啟動一遍 使用DHCP手動獲取一遍ip sudo dhclient ens33成功得到ip 這是后遇到了另一個問題&#xff0c;ip釋放后&#xff0c;不能自動…

Sass 基礎用法速覽

Sass 基礎用法速覽 目錄 Sass 基礎用法速覽1. 什么是 Sass&#xff1f;2. 安裝 Sass2.1 使用 npm 安裝&#xff08;推薦&#xff09;2.2 使用 Dart Sass&#xff08;官方推薦&#xff09;2.3 使用 GUI 工具 3. Sass 基本用法3.1 編譯 Sass 4. Sass 語法詳解4.1 變量4.2 嵌套4.3…

洛谷B3840 [GESP202306 二級] 找素數

題目描述 小明剛剛學習了素數的概念&#xff1a;如果一個大于 1 的正整數&#xff0c;除了 1 和它自身外&#xff0c;不能被其他正整數整除&#xff0c;則這個正整數是素數。現在&#xff0c;小明想找到兩個正整數 A 和 B 之間&#xff08;包括 A 和 B&#xff09;有多少個素數…

idea部署本地倉庫和連接放送遠程倉庫

1.下載git&#xff0c;安裝好后任意地方又鍵會出現兩個帶git的東西 2.點擊bash here的那個&#xff0c;召喚出git的小黑窗&#xff0c;輸入 git config --global user.name "你自己取名" git config --global user.email "你自己輸入你的郵箱" 3.打開id…

C++(20): 文件輸入輸出庫 —— <fstream>

目錄 一、 的核心功能 二、核心類及功能 三、核心操作示例 1. 文本文件寫入&#xff08;ofstream&#xff09; 2. 文本文件讀取&#xff08;ifstream&#xff09; 3. 二進制文件操作&#xff08;fstream&#xff09; 四、文件打開模式 五、文件指針操作 六、錯誤處理技巧…

elementUI 循環出來的表單,怎么做表單校驗?

數據結構如下&#xff1a; diversionParamList: [ { length: null, positionNumber: null, value: null, } ] 思路&#xff1a;可根據 index 動態綁定 :props 屬性值&#xff0c;校驗規則寫在:rules <div class"config-item" v-for"(item, index) in form.…

x-cmd install | Pillager:Go 語言打造的敏感信息文件系統掃描利器

目錄 Pillager 的獨特優勢安裝Pillager 的應用場景Pillager 的核心功能 還在為文件系統中潛在的敏感信息泄露而擔憂嗎&#xff1f;Pillager 是一款由 Go 語言編寫的強大工具&#xff0c;旨在幫助你輕松掃描文件系統&#xff0c;發現隱藏的密鑰、密碼、API 令牌等敏感信息。 Pil…

大模型(2)——提示工程(Prompt Engineering)

文章目錄 一、提示工程的核心概念為什么需要提示工程&#xff1f; 二、提示設計的基本原則三、實用提示工程技巧1. 角色設定法2. 示例引導法&#xff08;Few-Shot Learning&#xff09;3. 分階段提問4. 負面約束5. 溫度&#xff08;Temperature&#xff09;控制 四、不同任務類…

環境搭建

一個簡單的請求在加入spring security之前的樣子, 在瀏覽器中輸入地址就可以直接訪問 <!--引入spring security依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>&…