我一直在嘗試在 Kubernetes 空間中設定 ChirpStack,但它似乎對我不起作用,而且我在網路上找不到任何解決方案的資源。
**chirpstack-application-server-6d6f8d699c-nlrmx 1/1 Running 0 44s\
chirpstack-gateway-bridge-5454b7f9f-fm5wl 1/1 Running 0 73s\
chirpstack-mosquitto-646899d74d-d7bhl 0/1 CrashLoopBackOff 3 85s\
chirpstack-network-server-66cdf9bdf7-rhzg5 1/1 Running 0 55s**
上面是我有自動櫃員機的每個吊艙。應用程式伺服器、網頁伺服器、網關橋都啟動並運行,但是 Mosquitto 代理轉到“完成”並直接進入 CrashLoopBackOff。
我認為這可能與缺乏配置有關,因此我花了幾天時間將 mosquitto.conf 文件與“allow_anonymous true”放在一起,希望能夠從我的任何 ChirpStack 組件獲得連接,但日誌只是指示mqtt 連接被拒絕錯誤。
kubectl 日誌的輸出 chirpstack-application-server
time="2020-12-10T15:01:41Z" level=error msg="integration/mqtt: connecting to broker error, will retry in 2s: Network Error : dial tcp 10.244.146.236:1883: i/o timeout"
因為無法建立連接,所以我認為情況恰恰相反,我需要添加password_file並將allow_anonymous設定為false。以下是我目前的配置,如果有人可能知道出了什麼問題。
configMap-1.yml
kind: ConfigMap
metadata:
name: mosquitto-password
namespace: ****
labels:
app: chirpstack-mosquitto
data:
password_file.txt: |
admin:admin
user:user
app-server:app-server
net-server:net-server
gateway-bridge:gateway-bridge
配置映射.yml
kind: ConfigMap
metadata:
name: mosquitto-config
namespace: ****
labels:
app: chirpstack-mosquitto
data:
mosquitto.conf: |
persistence true
persistence_location /mosquitto/data/
# per_listener_settings false
log_dest stdout
# listener 1886
listener 1883
protocol mqtt
# Defaults to false, unless there are no listeners defined in the configuration
# file, in which case it is set to true, but connections are only allowed from
# the local machine.
allow_anonymous false
password_file /.config/mosquitto/auth/password_file.txt
# cafile: /mosquitto/config/certs/ca.crt
# certfile: /mosquitto/config/certs/server.crt
# keyfile: /mosquitto/config/certs/server.key
require_certificate false
use_identity_as_username false
部署.yml
kind: Deployment
metadata:
name: chirpstack-mosquitto
namespace: ****
spec:
replicas: 1
selector:
matchLabels:
app: chirpstack-mosquitto
template:
metadata:
labels:
app: chirpstack-mosquitto
spec:
containers:
- name: chirpstack-mosquitto
image: ****/chirpstack/eclipse-mosquitto:1.6.12
ports:
- containerPort: 1883
volumeMounts:
- name: password-file
mountPath: /.config/mosquitto/auth/password_file.txt
subPath: password_file.txt
- name: mosquitto-data
mountPath: /mosquitto/data
- name: mosquitto-log
mountPath: /mosquitto/log
- name: config-file
mountPath: /.config/mosquitto/mosquitto.conf
subPath: mosquitto.conf
securityContext:
runAsNonRoot: true
fsGroup: 1
runAsGroup: 1000
runAsUser: 1000
supplementalGroups:
- 1
volumes:
- name: config-file
configMap:
name: mosquitto-config
- name: password-file
configMap:
name: mosquitto-password
- name: mosquitto-data
emptyDir: {}
- name: mosquitto-log
emptyDir: {}
服務.yml
kind: Service
metadata:
name: chirpstack-mosquitto
namespace: 186215-poc
spec:
type: ClusterIP
ports:
- name: mqtt
port: 1883
targetPort: 1883
protocol: TCP
selector:
app: chirpstack-mosquitto
答案1
蚊子/configmap.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: mosquitto-config
data:
mosquitto.conf: |-
# Ip/hostname to listen to.
# If not given, will listen on all interfaces
#bind_address
# Port to use for the default listener.
port 1883
# Allow anonymous users to connect?
# If not, the password file should be created
allow_anonymous true
# The password file.
# Use the `mosquitto_passwd` utility.
# If TLS is not compiled, plaintext "username:password" lines bay be used
# password_file /mosquitto/config/passwd
蚊子/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mosquitto
spec:
selector:
matchLabels:
app: mosquitto
template:
metadata:
labels:
app: mosquitto
spec:
containers:
- name: mosquitto
image: eclipse-mosquitto:2.0
resources:
requests:
cpu: "50m"
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 1883
volumeMounts:
- name: mosquitto-config
mountPath: /mosquitto/config/mosquitto.conf
subPath: mosquitto.conf
volumes:
- name: mosquitto-config
configMap:
name: mosquitto-config
蚊子/service.yaml:
apiVersion: v1
kind: Service
metadata:
name: mosquitto
spec:
selector:
app: mosquitto
ports:
- port: 1883
targetPort: 1883
現在:
$ kubectl apply -f mosquitto/
$ kubectl get pods,deployments,services -o wide
$ kubectl logs -l app=gateway-bridge -f --all-containers
答案2
按著這些次序:
調整值.yaml文件,新增節點連接埠或者負載平衡器並啟用儲存類別。
service: type: NodePort persistence: storageClass: "oci-bv"
部署透過舵圖:
helm install mosquitto --generate-name
請參閱蚊子吊艙日誌:
kubectl logs pod/mosquitto-service-name
.例如:測試服務:
訂戶:
docker run -it --rm --name mqtt-subscriber efrecon/mqtt-client sub -h ip_address -p port -t "/#"
出版商:
docker run -it --rm --name mqtt-publisher efrecon/mqtt-client pub -h ip- address -m "SOOntestMessage" -p port -t "/test"
您應該會在訂閱者上收到訊息: