天天看點

nacos + k8s部署springcloud微服務

作者:一起玩程式設計
nacos + k8s部署springcloud微服務

k8s安裝

參見

kubernetes 的安裝與部署

https://www.jianshu.com/p/a4ec985977c2

常見錯誤

  1. 需要雙核cpu
  2. Error downloading packages libnetfilter_cthelper

解決:手動安裝 yum install -y libnetfilter_cthelper

  1. kubectl conflicts with file from package kubernetes-client

解決:yum remove kubernetes-client-1.5.2-0.7.git269f928.el7.centos.aarch64

  1. 無法啟動k8s服務,先執行kubeadm init
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.197.10 \
--service-cidr=10.222.0.0/16 \
--pod-network-cidr=10.244.0.0/16           

提示如下:

Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You 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/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.197.10:6443 --token g01ldy.ikqrqrp2pgm18t4y \
--discovery-token-ca-cert-hash sha256:62ce23cd9b76c5409fec58f4a2b37e083fefc0204386d2d95546fe0b02109b31           

根據提示然後執行下列指令

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#如果是root使用者,執行下列指令
export KUBECONFIG=/etc/kubernetes/admin.conf           
  1. 子節點加入k8s網絡,token 有效時間是24小時,如果過來24小時那麼需要重新整理token

# 在master 主節點上運作指令,重新整理 token

kubeadm token create --print-join-command

基本概念

Pod

pod并不等于容器。一個pod可以由多個容器組成。例如,Pod可以包括一個帶有Node.js應用程式的容器和另一個向web伺服器提供資料的容器。

pod有以下内容:

  • 單一IP位址
  • 共享主機
  • 共享的IPC空間
  • 共享網絡端口範圍
  • 共享卷

組成pod的所有容器都運作在同一台機器上,不能跨多個節點拆分。

Pod的Kubectl指令行操作

建立并運作Pod

#建立命名空間 dev

kubectl create ns dev

#建立pod

kubectl run my-nginx --image=nginx:latest --port=80 --namespace=dev

查詢所有Pod的基本資訊

kubectl get pods -n dev -o wide –w

檢視Pod的詳細資訊

kubectl describe pod my-nginx -n dev

通路pod中容器提供的服務

curl 10.244.169.134:80

檢視pod的日志

kubectl logs -f my-nginx -n dev

重新開機指定的Pod

kubectl delete pod my-nginx -n dev

删除後自動建立,達到重新開機效果

Pod的Kubectl配置檔案操作

建立pod-nginx.yaml,内容如下:

[root@k8s-master ~]# vim pod-nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: dev
spec:
  containers:
  - image: nginx:latest
    imagePullPolicy: IfNotPresent
    name: nginx-container
    ports: 
    - name: nginx-port
      containerPort: 80
      protocol: TCP
[root@k8s-master ~]#
           

通過指令式對象配置進行建立和删除

kubectl create -f pod-nginx.yaml

kubectl delete -f pod-nginx.yaml

Deployment

deployments資源類型位于一個副本集(ReplicaSet)之上,可以對其進行操作。換句話說,deployments為pods副本集提供更新。

nacos + k8s部署springcloud微服務

Deployment的Kubectl指令行操作

建立指定名稱的deployement

kubectl create deployment my-nginx --image=nginx -n dev

-n 指定命名空間

将deploy的一個pod拓展到4個pod

kubectl scale deployment my-nginx --replicas=4 -n dev

檢視deployment的資訊

kubectl get deploy -n dev

kubectl get pod -n dev

檢視deployment的詳細資訊

kubectl describe deployment my-nginx -n dev

删除deployment

deployment控制器删除,deployment下的pod也會被删除

kubectl delete deployment my-nginx -n dev

Service

如果我們想要連接配接到pods,就需要建立一個Service。在Kubernetes中,Service是一組pods上的網絡抽象。可以将其看作在叢集上運作的一組pods。Kubernetes服務通常用于支援微服務體系結構。

服務類型

可以使用的服務類型如下:

ClusterIP:

通過叢集的内部 IP 暴露服務,選擇該值,服務隻能夠在叢集内部可以通路,這也是預設的Service類型。ClusterIP類型的service建立時,k8s會通過etcd從可配置設定的IP池中配置設定一個IP,該IP全局唯一,且不可修改。所有通路該IP的請求,都會被iptables轉發到後端的endpoints中。

NodePort:

通過每個 Node 節點上的 IP 和靜态端口(NodePort)暴露服務。NodePort 服務會路由到 ClusterIP 服務,這個 ClusterIP 服務會自動建立。通過請求 :,可以從叢集的外部通路一個 NodePort 服務。

LoadBalancer:

需要外部支援(GCP and Azure),使用者通路service.spec.external-ip,該IP對應到一個外部負載均衡的vip,外部服務對這個vip的請求,會被loadbalancer通過健康檢查和轉發,發送到一個運作着該服務pod的node上,并同樣通過nodePort裡的端口映射,發送給容器。

ExternalName:

使用者可以指定一個任意的名字,作為該service被解析的CNAME,這種類型的servcie不用指定clusterIP,是以kube-proxy不會管理這類service,這類service需要使用1.7版本以上的kubedns。

提供容器服務

對内提供服務

Pod的網絡是K8s在實體機上建立了一層Overlay Network實作的,而且在網卡上能夠看到這個網絡的位址。但是Service是一個完全虛拟的網絡層,并不會存在于任何網絡裝置上。它通過修改叢集内部的路由規則,僅對叢集内部有效。Deploment建立好應用之後,再為它生成一個Service對象。接下來就可以通過Service的域名通路到服務,形式是<Service Name>.<NameSpace>,比如你有為Deployment的應用建立了一個名為portal的Service在預設的命名空間,那麼叢集内想要通過Http通路這個應用,就可以使用http://portal.default。

對外提供服務

nacos + k8s部署springcloud微服務

StatefulSet

介紹

RC、Deployment、DaemonSet都是面向無狀态的服務,它們所管理的Pod的IP、名字,啟停順序等都是随機的,而StatefulSet是什麼?顧名思義,有狀态的集合,管理所有有狀态的服務,比如MySQL、MongoDB叢集等。

StatefulSet本質上是Deployment的一種變體,在v1.9版本中已成為GA版本,它為了解決有狀态服務的問題,它所管理的Pod擁有固定的Pod名稱,啟停順序,在StatefulSet中,Pod名字稱為網絡辨別(hostname),還必須要用到共享存儲。

在Deployment中,與之對應的服務是service,而在StatefulSet中與之對應的headless service,headless service,即無頭服務,與service的差別就是它沒有Cluster IP,解析它的名稱時将傳回該Headless Service對應的全部Pod的Endpoint清單。

除此之外,StatefulSet在Headless Service的基礎上又為StatefulSet控制的每個Pod副本建立了一個DNS域名,這個域名的格式為:

$(podname).(headless server name)

FQDN:$(podname).(headless server name).namespace.svc.cluster.local

特點

Pod一緻性:包含次序(啟動、停止次序)、網絡一緻性。此一緻性與Pod相關,與被排程到哪個node節點無關;

穩定的次序:對于N個副本的StatefulSet,每個Pod都在[0,N)的範圍内配置設定一個數字序号,且是唯一的;

穩定的網絡:Pod的hostname模式為(statefulset名 稱 ) − (statefulset名稱)-(statefulset名稱)−(序号);

穩定的存儲:通過VolumeClaimTemplate為每個Pod建立一個PV。删除、減少副本,不會删除相關的卷。

headless service

為什麼需要 headless service 無頭服務?

在用Deployment時,每一個Pod名稱是沒有順序的,是随機字元串,是以是Pod名稱是無序的,但是在statefulset中要求必須是有序 ,每一個pod不能被随意取代,pod重建後pod名稱還是一樣的。而pod IP是變化的,是以是以Pod名稱來識别。pod名稱是pod唯一性的辨別符,必須持久穩定有效。這時候要用到無頭服務,它可以給每個Pod一個唯一的名稱 。

常用資訊

1. 常用指令

# 檢視k8s 運作日志指令, 這個比較有用,在k8s 啟動、kubeadm init、kubeadm join 階段可以輔助分析問題。

journalctl -xefu kubelet

# 檢視k8s驅動

systemctl show --property=Environment kubelet |cat

# 重新開機k8s

systemctl restart kubelet

# 啟動k8s

systemctl start kubelet

# 停止k8s

systemctl stop kubelet

# 開機自啟k8s

systemctl enable kubelet

# dashboard 擷取token

kubectl describe secret admin-user -n kubernetes-dashboard

# kubeadm 重置, 有些時候我們在使用kubeadm init 指令時會報錯,我們根據錯誤提示修複問題後需要重新進行 init 操作,是以需要進行reset重置

kubeadm reset

删除普通pod

#檢視deployment

kubectl get deployment --all-namespaces

#删除deploymnet,pod随之删除

kubectl delete deployment nacos-operator

#縮容

kubectl scale deployment/nacos-operator --replicas=0 -n default

删除nacos pod

kubectl scale statefulset nacos --replicas=0

删除service

kubectl delete svc myapp nacos-operator

删除mysql

kubectl scale rc mysql --replicas=0

2. 環境資訊

# k8s 安裝目錄
ll /etc/kubernetes/
總用量 32
-rw-------. 1 root root 5642 6月 28 15:19 admin.conf
-rw-------. 1 root root 5674 6月 28 15:19 controller-manager.conf
-rw-------. 1 root root 1986 6月 28 15:19 kubelet.conf
drwxr-xr-x. 2 root root 113 6月 28 15:19 manifests
drwxr-xr-x. 3 root root 4096 6月 28 15:19 pki
-rw-------. 1 root root 5618 6月 28 15:19 scheduler.conf
# 元件配置檔案目錄
ll /etc/kubernetes/manifests/
總用量 16
-rw-------. 1 root root 2310 6月 28 15:19 etcd.yaml
-rw-------. 1 root root 3378 6月 28 15:19 kube-apiserver.yaml
-rw-------. 1 root root 2879 6月 28 15:19 kube-controller-manager.yaml
-rw-------. 1 root root 1464 6月 28 15:19 kube-scheduler.yaml
# 自定義dashboard yaml檔案目錄
ll /opt/kube-dashboard/conf/
總用量 4
-rw-r--r--. 1 root root 1124 6月 29 08:41 admin-user-dashboard.yaml
ll /opt/apps/k8s/
總用量 4
-rw-r--r--. 1 root root 285 6月 29 08:25 k8s-dashboard.yaml           

k8s部署 Ingress-nginx controller

什麼是 Ingress

Ingress 是對叢集中服務的外部通路進行管理的 API 對象,典型的通路方式是 HTTP。Ingress 可以提供負載均衡

Ingress 公開了從叢集外部到叢集内服務的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 資源上定義的規則控制。

下面是一個将所有流量都發送到同一 Service 的簡單 Ingress 示例:

nacos + k8s部署springcloud微服務

但是 僅建立 Ingress 資源本身沒有任何效果,需要有對應的 Ingress 控制器 ,你可能需要部署 Ingress 控制器,例如 ingress-nginx。 你可以從許多 Ingress 控制器 中進行選擇。

什麼是 Ingress controller

為了讓 Ingress 資源工作,叢集必須有一個正在運作的 Ingress 控制器。k8s官網維護了 3 個Ingress控制器

目前支援和維護 AWS、 GCE 和 Nginx Ingress 控制器 ,本篇就拿 Ingress-nginx 作為控制器為例 講解一下如何部署

部署 Ingress-nginx controller

部署過程參考《k8s 1.23版本安裝Ingress-nginx》,要點如下:

  • 修改ingress-nginx-controller的deploy.yaml

鏡像檔案位址,改成國内鏡像

nacos + k8s部署springcloud微服務
nacos + k8s部署springcloud微服務

Service Type改成NodePort

删除配置 externalTrafficPolicy: Local(不删除外部無法通路Ingress)

nacos + k8s部署springcloud微服務
  • 安裝service-nodeport.yaml,ingress-nginx相關的service配置檔案
nacos + k8s部署springcloud微服務
  • 安裝ingress-dev.yaml ,建立普通的nginx deployment和service(類似應用服務)
  • 安裝 ingress.yaml,配置nginx監聽轉發
  • 客戶機hosts檔案配置域名轉發 172.10.10.10 at.k8s.com,域名可指向k8s叢集中任意機器
  • 客戶機使用浏覽器通路nginx,31972是ingress-nginx-controller的80對外映射端口,可使用kubectl get svc -n ingress-nginx檢視ingress-nginx-controller服務擷取
nacos + k8s部署springcloud微服務

k8s部署springboot項目

建立springboot項目,并打包

@RestController

@RequestMapping("/k8s")

@Slf4j

public class K8sDemoController {

@GetMapping("hello")

public String hello(String name) {

String msg = String.format("Hello: %s welcome to k8s", name);

log.info("【{}】", msg);

return msg;

}

}

編寫Dockerfile

FROM openjdk:8

COPY ./target/test-k8s-demo-0.0.1-SNAPSHOT.jar /app/springboot-k8s-demo.jar

# 容器工作目錄

# WORKDIR /usr/local

# 設定字元集

ENV LANG C.UTF-8

ENTRYPOINT ["java", "-jar" , "/app/springboot-k8s-demo.jar"]

打包鏡像

為使用docker将/target/test-k8s-demo-0.0.1-SNAPSHOT.jar和Dockerfile上傳到k8s某個節點(也可以是安裝了docker的任何機器),執行下列指令

$ docker build -t boot-k8s-demo:v1 . #建構鏡像

注意最後有個點,預設使用 “上下文目錄(Context)下的名為Dockerfile 的檔案作為 Dockerfile”,在此,即用目前路徑的 Dockerfile 進行建構 。

把鏡像 push 到對應的 阿裡雲倉庫

浏覽器通路https://cr.console.aliyun.com/cn-hangzhou/instance/

進入阿裡雲容器鏡像服務,點選個人執行個體

nacos + k8s部署springcloud微服務

點選鏡像倉庫菜單-建立鏡像倉庫按鈕,建立k8s倉庫

nacos + k8s部署springcloud微服務

第一步倉庫名稱為k8s,倉庫類型選擇公開;第二部代碼源選擇本地倉庫

可在通路憑證-設定固定密碼設定通路密碼

nacos + k8s部署springcloud微服務

docker tag boot-k8s-demo:v1 registry.cn-hangzhou.aliyuncs.com/muxiaoshan/k8s:v1

docker login --username=xxxxxx registry.cn-hangzhou.aliyuncs.com

docker push registry.cn-hangzhou.aliyuncs.com/muxiaoshan/k8s:v1

編寫 k8s deploy yaml 進行部署2個副本 + ingress 實作基本的負載均衡

apiVersion: apps/v1
kind: Deployment #部署
metadata:
  name: springboot-app
spec:
  replicas: 2 #2個副本
  selector:
    matchLabels:
      app: springboot-app
  template:
    metadata:
      labels:
        app: springboot-app
    spec:
      containers:
      - name: springboot-app
        image: registry.cn-hangzhou.aliyuncs.com/muxiaoshan/k8s:v1 #剛剛push到阿裡雲上的鏡像位址
        ports:
        - containerPort: 20187 #springboot端口 
---
apiVersion: v1
kind: Service
metadata:
  name: springboot-app
spec:
  selector:
    app: springboot-app #選中上面的 Deployment
  ports:
  - port: 7003 #對外7003端口
    targetPort: 20187
--- 
#Ingress 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: springboot.demo.com
    http:
      paths:
      - path: /
        pathType: Prefix    # 字首比對
        backend:
          service:
            name: springboot-app
            port:
              number: 7003
           

kubectl 部署 deploy-springboot-k8s.yaml

kubectl apply -f deploy-springboot-k8s.yaml

通路請求路徑 進行測試

先把 springboot.demo.com 域名添加到客戶機hosts,轉到k8s叢集中任何一台機器皆可

172.10.10.10 springboot.demo.com

客戶機浏覽器通路http://springboot.demo.com:31972/k8s/hello?name=sam

nacos + k8s部署springcloud微服務

k8s部署nacos(可選)

推薦将注冊中心(包括nacos等)部署到k8s外,整個k8s叢集重新開機時,各個微服務節點常因連接配接不到叢集内的nacos而啟動失敗,而且叢集内nacos管理的服務容易掉線。加上nacos為有狀态服務,不建議部署到k8s,單獨搭建nacos叢集,友善管理與調試。《nacos官網叢集部署說明》

參考《k8s1.23.5部署nacos持久化叢集》,要點如下:

  1. 初始化外部資料庫(資料庫不部署到k8s)
  2. K8s configmap配置資料庫連接配接
  3. 部署Headless Service,在k8s中通過StatefulSet和Headless Service(沒有ClusterIP,無法負載均衡)為每個nacos執行個體生成一個唯一的dns位址
  4. 通過StatefulSet部署nacos。nacos鏡像使用v2.1.1版本,預設的latest是v2.0.3版本,新增配置會出錯
  5. service+ ingress配置,供外部通路nacos web
nacos + k8s部署springcloud微服務

k8s部署微服務提供端

和部署springboot項目一樣。

完整代碼包括docker腳本,k8s部署腳本等參見https://gitee.com/biplatform/cloud-nacos

應用配置(資料庫連接配接等)釋出到nacos配置中心。連接配接配置中心的參數需要寫在 bootstrap.yml 裡面而不能在application.yml裡,服務bootstrap.yml配置如下,nacos位址用dns:

#連接配接配置中心的參數需要寫在 bootstrap 裡面,寫在 application 裡面無法連接配接配置中心,參見:https://blog.csdn.net/MrHaoo/article/details/124169653
spring:
  application:
    name: nacos-provider-demo
  cloud:
    nacos:
      discovery: #注冊中心
        server-addr: 172.10.10.11:8848,172.10.10.12:8848
      config: #配置中心
        server-addr: 172.10.10.11:8848,172.10.10.12:8848
        file-extension: yml  #必須的參數,否則無法正确連接配接配置中心
server:
  port: 8000           

如果微服務總是無法連接配接到nacos,注意檢查nacos是否正常啟動(資料庫連接配接是否正常等),使用如下指令進入叢集内nacos容器并檢視日志

kubectl exec –it nacos-1 /bin/bash
tail –f logs/nacos.log –n 200           

服務提供端普通pod日志檢視

#擷取pod名稱
kubectl get pods
# -f 後跟pod名稱
kubectl logs -f nacos-provider-demo-c9cd4d8c9-7chqz           

注意修改k8s deploy yaml檔案的Ingress name,不同服務用不同的Ingress name,下面為deploy-nacos-provider-demo.yaml的部配置設定置

#Ingress 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nacos-provider
  annotations:
    kubernetes.io/ingress.class: "nginx"           

常見錯誤

  1. nacos配置中心啟動報錯java.nio.charset.MalformedInputException: Input length = 1

錯誤原因為nacos配置中心中配置或注釋包含中文

删除nacos配置中心的中文部分

  1. namespace 不能用指令空間名稱如prod、dev,而必須用id
  2. bootstrap.yml區分開發環境、生産環境問題

在一個bootstrap.yml檔案中可同時存在兩套配置

#服務配置
server:
  port: 8291
# Spring
spring:
  application:
    # 應用名稱
    name: nacos-provider-demo  #應用名字
  profiles:
    # 環境配置
active: dev

##上面是基礎配置,不用上配置中心那種
##下面是環境區分,主要不同環境不同檔案擷取
---
#開發環境
spring:
  profiles: dev
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: 0b656411-a4c8-4464-a726-d027bd0783ff
      config:
        server-addr: localhost:8848
        file-extension: yml
        group: DEFAULT_GROUP
        namespace: 0b656411-a4c8-4464-a726-d027bd0783ff
---
#正式環境
spring:
  profiles: prod
  cloud:
    nacos:
      discovery:
        server-addr: 172.10.10.11:8848,172.10.10.12:8848
        namespace: 19234622-bf8e-44f2-a82e-201b8a995131
      config:
        server-addr: 172.10.10.11:8848,172.10.10.12:8848
        file-extension: yml
        group: DEFAULT_GROUP
        namespace: 19234622-bf8e-44f2-a82e-201b8a995131           

啟動時指定使用的profiles即可

普通啟動指令

java -jar -Dspring.profiles.active=prod provider-demo-1.0-SNAPSHOT.jar

Docker指令

ENTRYPOINT ["java", "-jar" , "-Dspring.profiles.active=prod", "/app/provider-demo-1.0-SNAPSHOT.jar"]

部署到k8s後,打開浏覽器通路http://nacos-provider-demo.com:31972/tenantInfo?current=1&size=10

Demo查詢的是nacos租戶資訊,通路效果如下:

nacos + k8s部署springcloud微服務

K8s部署微服務消費端

和部署springboot項目一樣。

使用openfeign實作消費端對服務端的遠端調用,參見《Spring Cloud OpenFeign 詳解》

Openfeign發起get請求傳遞對象參數,參考《OpenFeign的get方法傳遞對象的兩種方式》

注意openfeign需要同時添加負載均衡依賴

<!-- 負載均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>           

@FeignClient标明遠端調用的服務名稱;@GetMapping标明遠端調用的服務路徑;@SpringQueryMap用于傳遞對象參數,不加則提示MethodNotAllowed異常

@FeignClient("nacos-provider-demo")
public interface DemoFeign {
/**
* 注解傳遞對象 @SpringQueryMap
* @param query
* @return
*/
@GetMapping(value = "/provider/share-osci-fpar-valid/getOsciFparValids")
Result<List<AirOsci>> search2(@SpringQueryMap ShareOsciFparValidQO query);
}           

編寫一個Controller調用openfeign

@RestController
public class ConsumerController {
@Resource
private DemoFeign demoFeign;
@GetMapping("search")
public Result<List<AirOsci>> search(ShareOsciFparValidQO query)
{
return demoFeign.search2(query);
}
}           

K8s部署網關

和部署springboot項目一樣。

注意,bootstrap.yml中啟用服務名稱對服務的通路,否則無法通過服務名稱轉發請求到微服務

spring:
  cloud:
    gateway:
      discovery:
        locator:
          #開放服務名通路方式 true時候,可以使用位址 http://localhost:7000/service-wx/xler/wx/test1 就是直接可以通過服務名然後去定位controller位址進行通路
          #false就 隻能 通過配置的路由進行通路
          enabled: true           

在網關上部署一個靜态頁面

nacos + k8s部署springcloud微服務

網關頁面送出請求到consumer

nacos + k8s部署springcloud微服務

Consumer通過openfeign請求到provider

效果如下:

nacos + k8s部署springcloud微服務

至此完成個k8s叢集搭建、k8s叢集内部署微服務

參考文獻

1. kubernetes 的安裝與部署 https://www.jianshu.com/p/a4ec985977c2

2. Kubernetes進階之路(九)Service系列之ClusterIP&NodePort https://www.jianshu.com/p/c14cce5fc7a2

3. 一關系圖讓你了解K8s中的概念,Pod、Service、Job等到底有啥關系 - 知乎https://zhuanlan.zhihu.com/p/105006577

4. Kubernetes(k8s)的Namespace、Pod、Label、Deployment、Service實戰入門 https://blog.csdn.net/yy8623977/article/details/124769617

5. 何時使用kubernetes的deployments、pods和services?https://baijiahao.baidu.com/s?id=1690745074914054477

6. k8s部署springboot項目 https://blog.csdn.net/qq_34285557/article/details/124460872

7. k8s 新版本 部署 Ingress-nginx controller - Ingress相關概念描述 https://blog.csdn.net/qq_34285557/article/details/124254787

8. k8s 1.23版本安裝Ingress-nginx - 實際參照,修改deploy.yaml含國内鏡像下載下傳 https://blog.csdn.net/weixin_43054437/article/details/127171731

9. Ingress作用 - 當我們配置了Ingress規則後,kube-proxy就不再起作用,ingress-controller會直接從service所屬的endpoints中選擇一個Pod,将流量直接轉發到該Pod上,進而實作7層負載均衡 https://www.jianshu.com/p/23467210e62c

10. k8s ingress-nginx網絡無法通路到容器問題 - 删除此配置externalTrafficPolicy: Local http://events.jianshu.io/p/4e1a97577e33

11. k8s部署Nacos叢集 https://blog.csdn.net/baidu_38432732/article/details/124963395

12. [K8S系列八] K8S實戰 部署spring-cloud+nacos+MySQL服務 https://www.jianshu.com/p/4b445b46eb67

13. k8s部署nacos叢集(官方文檔版)https://blog.csdn.net/qq_45449792/article/details/123307796

14. k8s1.23.5部署nacos持久化叢集 – 配置檔案名清晰、過程清晰https://blog.csdn.net/weixin_42236986/article/details/123997114

15. K8S安裝部署Nacos叢集 – 配置代碼易複制

https://blog.csdn.net/u011936655/article/details/108364176

16. k8s安裝nacos(nacos鏡像版本2.0.3) – 解決新增配置失敗問題,更新鏡像

https://blog.csdn.net/chengqwertyuiop/article/details/125326953

17. k8s之StatefulSet詳解

https://blog.csdn.net/weixin_44729138/article/details/106054025

18. SpringCloud - feign以XML格式傳輸

https://blog.csdn.net/baiofchao/article/details/102524933

19. Spring Cloud OpenFeign 詳解

https://blog.csdn.net/qq_16116881/article/details/124267414

20. OpenFeign的get方法傳遞對象的兩種方式

https://blog.csdn.net/qq_47493459/article/details/124290580