在k8s中副本使用pod的IP注冊到consul全過程
更新時間:2026年02月25日 09:51:35 作者:October-
文章介紹了如何在Kubernetes環(huán)境中通過DNS獲取POD的IP,并將其用于注冊到Consul,通過修改服務啟動腳本和Kubernetes樣本文件,使得微服務能夠獲取POD信息并使用該IP注冊到Consul,從而實現(xiàn)服務間的發(fā)現(xiàn)和通信
前提條件: consul 部署在k8s 的節(jié)點上
1、通過DNS獲取POD的IP
1.1、服務啟動腳本
#!/bin/bash
# 啟動服務,獲得pod中的IP,POD中的hosts配置最后一行就是它自己的IP
export HOST_IP=$(tail -n 1 /etc/hosts|awk 'END {print}'| awk '{for(i =1; i <=NF; i++){ if($i~/[0-9]\.[0-9]/) print $i}}')
echo ${HOST_IP}
#通過環(huán)境變量傳遞給微服務
java -jar -DHOST_IP=${HOST_IP} /opt/service/sample/sample-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod1.2、微服務修改配置
spring:
application:
name: sample
cloud:
consul:
host: ${consul_host:10.0.10.110}
port: ${consul_port:8500}
discovery:
register: true
service-name: ${spring.application.name}
health-check-path: /actuator/health
healthCheckInterval: 10s
tags: urlprefix-/${spring.application.name}
instance-id: {spring.application.instance_id:${random.value}}}
health-check-critical-timeout: 30s
hostname: ${HOST_IP}2、在K8S的樣本文件通過env獲取 POD信息
2.1、樣本文件修改
…………
env:
- name: CONSUL_HOST
value: 10.0.10.110
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
………….2.2、檢查環(huán)境變量是否生效
[root@kvm13-pre ~]# kubectl exec -it sample-6f7fcd5567-9sxl9 -n lenovo /bin/bash root@sample-6f7fcd5567-9sxl9:/opt/service/sample# echo $POD_IP 10.244.3.94 root@sample-6f7fcd5567-9sxl9:/opt/service/sample#
2.3、服務啟動腳本
#!/bin/bash
# 啟動服務
java -jar -DHOST_IP=${POD_IP} /opt/service/lenovo_sample/sample-service-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod2.4、微服務修改配置
spring:
application:
name: sample
cloud:
consul:
host: ${consul_host:10.0.10.110}
port: ${consul_port:8500}
discovery:
register: true
service-name: ${spring.application.name}
health-check-path: /actuator/health
healthCheckInterval: 10s
tags: urlprefix-/${spring.application.name}
instance-id: {spring.application.instance_id:${random.value}}}
health-check-critical-timeout: 30s
hostname: ${HOST_IP}3、效果
能夠看到所有服務 都是使用POD 的IP來注冊到consul上


總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Kubernetes(K8S)中強制刪除命名空間的實現(xiàn)方式
本文介紹了在Kubernetes中刪除處于Terminating狀態(tài)的命名空間mysql-operator的步驟,包括檢查并清理殘留資源、強制刪除命名空間等方法2026-01-01
K8S中某個容器突然出現(xiàn)內(nèi)存和CPU占用過高的問題及解決方案
當K8S容器出現(xiàn)資源過載時,可通過kubectl監(jiān)控定位問題,調(diào)整資源限制,優(yōu)化應用代碼,拆分多應用容器,利用監(jiān)控工具排查,實施水平擴展或遷移負載,確保集群穩(wěn)定運行2025-07-07
k8s?clientConfig和rawConfig區(qū)別解析
k8s clientConfig和rawConfig區(qū)別k8s.io/client-gov0.28.2基于kubeconfig可以創(chuàng)建clientConfig和rawConfig,兩者區(qū)別在于,clientConfig包含了訪問kube-apiserver的地址和認證鑒權(quán)信息,感興趣的朋友一起看看吧2025-03-03

