使用Nacos Controller同步k8s服务到Nacos
概述
Nacos Controller支持k8s配置双向同步及服务同步到Nacos。本文讲述如何使用Nacos Controller同步k8s服务到Nacos。
前置条件
部署自定义资源
#克隆仓库git clone https://github.com/nacos-group/nacos-controller.gitcd nacos-controller/charts/nacos-controller#导出k8s集群配置文件路径export KUBECONFIG=/path/to/your/kubeconfig/file# 创建CRD安装的命名空间kubectl create ns nacos# 安装CRDhelm install -n nacos nacos-controller .
安装成功后,使用”kubectl get crd | grep nacos” 检查结果,如下结果表示正常:
创建Secret
创建Nacos鉴权使用的Secret,包括Nacos用户名、密码。如果使用了MSE Nacos,并且开启了鉴权,还需要配置AK、SK。注意:参数值为base64编码之后的值。
-
创建secret配置文件
apiVersion: v1kind: Secretmetadata:name: nacos-authdata: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/v1kind: ServiceDiscoverymetadata:name: sd-demospec:nacosServer:# serverAddr: Nacos地址serverAddr: <nacos-addr># namespace: 需要把k8s服务同步到Nacos的命名空间Idnamespace: <nacos-namespace-id># authRef: 包含 Nacos 客户端认证凭据的 Secret(支持用户名/密码或 AK/SK;如果 Nacos 服务器认证已禁用则可省略authRef:apiVersion: v1kind: Secretname: nacos-auth# 需要同步的服务列表,如果需要同步全量服务则可忽略services: ["my-nginx","test1"]
- 创建 Service Discovery
kubectl apply -f sd.yaml -n nacos
创建Deployment
- 以nginx为例创建deployment配置文件
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: 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: v1kind: Servicemetadata:name: my-nginxlabels:run: my-nginxspec:ports:- port: 80protocol: TCPselector: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
查看同步结果
curl "$NACOS_ADDR/nacos/v3/admin/ns/instance/list?serviceName=my-nginx' -H "userName:$USER_NAME" -H "password:$PASSWORD"