使用Nacos Controller同步k8s服务到Nacos
使用Nacos Controller同步k8s服务到Nacos
概述
Nacos Controller支持k8s配置双向同步及服务同步到Nacos。本文讲述如何使用Nacos Controller同步k8s服务到Nacos。
前置条件
部署自定义资源
Terminal window
#克隆仓库
git clone https://github.com/nacos-group/nacos-controller.git
cd nacos-controller/charts/nacos-controller
#导出k8s集群配置文件路径
export KUBECONFIG=/path/to/your/kubeconfig/file
## 创建CRD安装的命名空间
kubectl create ns nacos
## 安装CRD
helm install -n nacos nacos-controller .
安装成功后,使用”kubectl get crd | grep nacos” 检查结果,如下结果表示正常:

创建Secret
创建Nacos鉴权使用的Secret,包括Nacos用户名、密码。如果使用了MSE Nacos,并且开启了鉴权,还需要配置AK、SK。注意:参数值为base64编码之后的值。
- 创建secret配置文件
apiVersion: v1
kind: Secret
metadata:
name: nacos-auth
data:
accessKey: <base64 ak>
secretKey: <base64 sk>
username: <base64 your-nacos-username>
password: <base64 your-nacos-password>
- 创建secret
Terminal window
kubectl apply -f secret.yaml -n nacoskubectl
创建ServiceDiscovery
- 创建ServiceDiscovery配置文件
apiVersion: nacos.io/v1
kind: ServiceDiscovery
metadata:
name: sd-demo
spec:
nacosServer:
# serverAddr: Nacos地址
serverAddr: <nacos-addr>
# namespace: 需要把k8s服务同步到Nacos的命名空间Id
namespace: <nacos-namespace-id>
# authRef: 包含 Nacos 客户端认证凭据的 Secret(支持用户名/密码或 AK/SK;如果 Nacos 服务器认证已禁用则可省略
authRef:
apiVersion: v1
kind: Secret
name: nacos-auth
# 需要同步的服务列表,如果需要同步全量服务则可忽略
services: ["my-nginx","test1"]
- 创建 Service Discovery
kubectl apply -f sd.yaml -n nacos
创建Deployment
- 以nginx为例创建deployment配置文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
``` ```
kubectl apply -f nginx-deployment.yaml -n nacos
创建Service
- 创建yaml文件
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
app: nginx-test
- 部署Service
Terminal window
kubectl apply -f nginx-service.yaml -n nacos
- 查看Service endpoint
Terminal window
kubectl describe svc my-nginx -n nacos

查看同步结果
Terminal window
curl "$NACOS_ADDR/nacos/v3/admin/ns/instance/list?serviceName=my-nginx' -H "userName:$USER_NAME" -H "password:$PASSWORD"

