0

我在谷歌云上有一个名为 blog-dev 的 kubernetes 集群,在 us-central1-c 区域中有 3 个 N1-g1 小实例。我通过以下方式配置了我的集群

  1. 键入命令“gcloud init”。选择账户、项目和地区
  2. 键入命令“gcloud container clusters get-credentials blog-dev”
  3. 输入命令'kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.3/deploy/static/provider/cloud/deploy.yaml'
  4. 转到 GCloud 中的负载均衡器部分并复制负载均衡器 ip
  5. 将条目 'load-balancer-ip' blog.dev 放入 hosts.ini 文件中。将负载均衡器 ip 替换为第 4 步中的 IP
  6. 输入命令'kubectl create secret generic jwt-secret --from-literal=JWT_KEY=asdf'
  7. 键入命令“skaffold dev”。为此所需的文件可以在下面找到

Nats 部署

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: nats-depl
spec:
  replicas: 1
  selector:
    matchLabels: 
      app: nats
  template:
    metadata: 
      labels:
        app: nats
    spec:
      containers:
        - name: nats
          image: nats-streaming:0.17.0
          args: [
            '-p',
            '4222',
            '-m',
            '8222',
            '-hbi',
            '5s',
            '-hbt',
            '5s',
            '-hbf',
            '2',
            '-SD',
            '-cid',
            'BPB_MEAN_FRAMEWORK'
          ]
---
apiVersion: v1
kind: Service
metadata:
  name: nats-srv
spec:
  selector:
    app: nats
  ports:
    - name: client
      protocol: TCP
      port: 4222
      targetPort: 4222
    - name: monitoring
      protocol: TCP
      port: 8222
      targetPort: 8222

入口 yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - host: blog.dev
      http:
        paths:
          - path: /api/users/?(.*)
            backend:
              serviceName: auth-srv
              servicePort: 3100
          - path: /nats/?(.*)
            backend:
              serviceName: nats-srv
              servicePort: 4222
          - path: /api/posts/?(.*)
            backend:
              serviceName: posts-srv
              servicePort: 3100
          - path: /?(.*)
            backend:
              serviceName: client-srv
              servicePort: 80

Skaffold.yaml

apiVersion: skaffold/v2alpha3
kind: Config
deploy:
  kubectl: 
    manifests:
      - ./infra/k8s/*
build:
  #local:
  # push: false
  googleCloudBuild:
    projectId: blog-dev-326403
  artifacts:
    - image: us.gcr.io/blog-dev-326403/auth
      context: auth
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: 'src/**/.ts'
            dest: .
    - image: us.gcr.io/blog-dev-326403/client
      context: client
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
         - src: 'src/**/.ts'
           dest: .
    - image: us.gcr.io/blog-dev-326403/posts
      context: posts
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: 'src/**/.ts'
            dest: .

我在 nats-test/src 中创建了一个 publisher.ts

import nats from 'node-nats-streaming';
const stan = nats.connect('posts','abc',{
    url:'http://nats-srv:4222'
});

stan.on('connect',()=>{
    console.log('Publisher connected to nats');
})

我已经使用脚本部分中显示的条目更新了 package.json

"scripts": {
    "publish": "ts-node-dev --notify false src/publisher.ts",
    "listen": "ts-node-dev --notify false src/listener.ts"
  }

当我运行“npm run publish”时,出现如下所示的错误

NatsError: Could not connect to server: Error: connect ETIMEDOUT 216.239.36.21:4222
    at Socket.<anonymous> (/home/meanjsbpb/BPB_MEAN_Framework/node_modules/nats/lib/nats.js:833:26)
    at Socket.emit (events.js:223:5)
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
    at processTicksAndRejections (internal/process/task_queues.js:81:21)
[ERROR] 12:48:47 NatsError: Could not connect to server: Error: connect ETIMEDOUT 216.239.36.21:4222

NATS 监控页面可以从谷歌云网络预览中看到,并且 URL 是https://8222-cs-131594183002-default.cs-asia-southeast1-ajrg.cloudshell.dev/?authuser=1但是当我尝试从使用 http://nats-srv:8222 的浏览器,它显示“页面未显示”。

请帮忙!!!

4

0 回答 0