使用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” 检查结果,如下结果表示正常:

image.png

创建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

image.png

查看同步结果

Terminal window

curl "$NACOS_ADDR/nacos/v3/admin/ns/instance/list?serviceName=my-nginx' -H "userName:$USER_NAME" -H "password:$PASSWORD"

image.png