us-central1-c ゾーンに 3 つの N1-g1 スモール インスタンスがある Google クラウド上に blog-dev という名前の kubernetes クラスターがあります。次の方法でクラスターを構成しました
- コマンド「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 のものに置き換えます。
- コマンド「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 監視ページは Google クラウドの Web プレビューから表示され、URL はhttps://8222-cs-131594183002-default.cs-asia-southeast1-ajrg.cloudshell.dev/?authuser=1ですが、 http://nats-srv:8222 を使用してブラウザを起動すると、「ページが表示されません」と表示されます。
助けてください!!!