我在谷歌云上有一个名为 blog-dev 的 kubernetes 集群,在 us-central1-c 区域中有 3 个 N1-g1 小实例。我通过以下方式配置了我的集群
- 键入命令“gcloud init”。选择账户、项目和地区
- 键入命令“gcloud container clusters get-credentials blog-dev”
- 输入命令'kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.3/deploy/static/provider/cloud/deploy.yaml'
- 转到 GCloud 中的负载均衡器部分并复制负载均衡器 ip
- 将条目 'load-balancer-ip' blog.dev 放入 hosts.ini 文件中。将负载均衡器 ip 替换为第 4 步中的 IP
- 输入命令'kubectl create secret generic jwt-secret --from-literal=JWT_KEY=asdf'
- 键入命令“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 的浏览器,它显示“页面未显示”。
请帮忙!!!