cycoresystems / asterisk-k8s-demo Goto Github PK
View Code? Open in Web Editor NEWDemo of scalable Asterisk on Kubernetes
License: Apache License 2.0
Demo of scalable Asterisk on Kubernetes
License: Apache License 2.0
Good afternoon.
Where is the error in my configuration:
service exited: failed to reload asterisk modules: module res_pjsip.so failed to reload due bad authentication
Looks like the groundwork has been done to port vicidial to go? ๐
Great work and great demo at astricon!
This is not really an "issue" more of a question, but since it seems you put this out there for education/enlightment perhaps you won't mind a question..
Running SIP servers in k8s seems to present certain challenges. Inbound call scenarios are more easily handled, but if one sip server in a k8s cluster sends a sip request to the outside world over udp, I always wondered how would we ensure that k8s wouldn't try to route the associated sip response to a different pod than the one that sent the original request?
In your case, I think I see what you have done, but want to make sure I do.
First, you are using kamailio as the sip server that will talk to the "outside world". You then:
i) used a Daemonset, to ensure that only 1 kamailio pod will ever run on a single node
ii) set hostNetwork: true here so that kamailio will bind to the actual IP address of the node it is running on. This goes hand-in-hand with the above point, since using hostNetwork we need to ensure k8s doesn't try to schedule two of these on the same node (one would fail to bind to port 5060)
iii) used a nodeSelector to be able to specify only specific nodes that you want kamailio to run on (this way, you dont have kamailio running on every node, and also if needed for performance you could give it its own nodes).
Therefore, SIP requests that kamailio sends out of the cluster will have its "actual" IP address in the Via and Contact headers, and responses will get back to the same server.
Meanwhile, as far as asterisk, these will only take or send SIP messages to kamailios within the cluster I suppose, therefore they can be standard k8s deployments and services -- e.g you can run multiple asterisk pods on the same node, they will use simple dns/service names to locate kamailios, and they do not need to have hostNetwork enabled, etc. etc.
Have I got that right, and am I missing any key insights?
Hello, I am testing out the voice-demo and everything works as expected. The only problem is, inside of the "pipeFromAsterisk" function, at some point after the first call, the audiosocket container gets stuck in the loop and continuously prints out "recognition client closed". I am would like to know if this was the intended behavior or not.
What I observed is there is a MaxCallTimeout of two minutes, however, the context that the speech recognition client is created with is the background context? This is the parent context of the audiosocket, however it is passed all the way down to the Handle Function that creates a child context from the parent. The child context is the context with the MaxRecognitionDuration Timeout and this is the context used to create the recognition stream. At one minute, the "recognition client closed" is printed, however, If I hang up the phone and call right back, I get an infinite loop of "recognition client closed" being printed to the console and getting nothing to or from Google for the speech.
Is there a fix to this behavior to all ways have a new stream on every new call?
Hey I watched your presentation live last year, and rewatched online yesterday. I'm trying to get your stuff up and running in GKE, and even locally. What order do the images need created from your demo files? I've created a kamailio image from the kamailio directory. Also did the same for the asterisk one, but neither can run on their own.
Can you nudge me in the right direction to get something up and running? Thanks!
I am trying to transfer to a number with this dialplan:
exten => +15555555555,1,Background(silence/7)
same => n, Dial(PJSIP/+15555555550@twilio-na-us,30,tT)
However, Sometimes, maybe 40% of the time, there is no audio one way. The research is that it is a NAT issue and the asterisk server or the outbound PTSN is unable to find the correct NATed IP address.
Is there any settings that I should know about to get transfers 100%?
Hi,
I tried to setup asterisk onto my kubernetes cluster but without successes and I'm not sure on what is going wrong here.
What I did:
CLOUD
variable to "" (instead of gcp)Issues I'm facing:
2020/04/03 14:34:20 Waiting for Asterisk to be ready...
2020/04/03 14:34:20 service exited: failed to render defaults: template: t:5:12: executing "t" at <.Network>: error calling Network: Get "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip": dial tcp: lookup metadata.google.internal on 10.43.0.10:53: server misbehaving
2020/04/03 14:34:20 asterisk-config exiting
2020/04/03 14:38:05 WARNING: failed to get node <ip-asterisk-node> for endpoint asterisk: kubernetes api: Failure 403 nodes "<ip-asterisk-node>" is forbidden: User "system:serviceaccount:voip:default" cannot get resource "nodes" in API group "" at the cluster scope
2020/04/03 14:38:05 run died: failed to run initial dispatcher set update: kubernetes api: Failure 403 nodes "<ip-asterisk-node>" is forbidden: User "system:serviceaccount:voip:default" cannot get resource "nodes" in API group "" at the cluster scope
2020/04/03 14:38:05 too many short-term deaths
But I did well create the role & rolebinding as they are described here in this repository.
The container is running but when looking at the logs I see several errors:
21(53) ERROR: rtpproxy [rtpproxy.c:1476]: send_rtpp_command(): can't send command to a RTP proxy
21(53) ERROR: rtpproxy [rtpproxy.c:1511]: send_rtpp_command(): proxy <udp:localhost:7722> does not respond, disable it
I'm very new to asterisk and PBX stuffs so I'm a bit lost here and any hints on the direction I should follow in order to get it up and running on my kubernetes cluster would be welcome.
Thank you.
hello, I would like to congratulate you on this project.
I have installed and configured but I have a problem with the test I would like to know how a user A can reach another user B with asterisk-config.
Hi i am a beginner and just trying out on asterisk to understand how it works. However i have a problem deploying the asterisk and the asterisk pod giving me the status CrashLoopBackOff. Below are some of the details for your reference. Can you help guide on me to see what is wrong. Thank you
NAME READY STATUS RESTARTS AGE
pod/asterisk-6fc6c99fbc-mvpsj 2/3 CrashLoopBackOff 4 2m5s
pod/kamailio-c46kf 3/3 Running 1 32h
pod/nats-5cbb79bcbc-llx56 1/1 Running 0 32h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/asterisk ClusterIP 10.107.193.176 <none> 5060/UDP 21d
service/kamailio ClusterIP 10.99.13.139 <none> 5060/UDP 21d
service/nats ClusterIP 10.107.162.129 <none> 4222/TCP,6222/TCP,8222/TCP 21d
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/kamailio 1 1 1 1 1 type=kamailio 21d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/asterisk 0/1 1 0 32h
deployment.apps/nats 1/1 1 1 21d
NAME DESIRED CURRENT READY AGE
replicaset.apps/asterisk-6fc6c99fbc 1 1 0 2m5s
replicaset.apps/asterisk-78f755686c 0 0 0 32h
replicaset.apps/asterisk-7bfc96c6 0 0 0 2m30s
replicaset.apps/nats-5cbb79bcbc 1 1 1 32h
kubectl describe pod asterisk --namespace=voip
Name: asterisk-6fc6c99fbc-mvpsj
Namespace: voip
Priority: 0
Node: minikube/192.168.99.100
Start Time: Sat, 28 Aug 2021 09:14:55 +0800
Labels: component=asterisk
pod-template-hash=6fc6c99fbc
Annotations: kubectl.kubernetes.io/restartedAt: 2021-08-28T09:15:22+08:00
Status: Running
IP: 172.17.0.3
IPs:
IP: 172.17.0.3
Controlled By: ReplicaSet/asterisk-6fc6c99fbc
Containers:
asterisk:
Container ID: docker://0c11c510e376c506bcb2ef20755e28a5455cbfd122aec7a92769ad9d59fd970d
Image: cycoresystems/asterisk:16.6.1
Image ID: docker-pullable://cycoresystems/asterisk@sha256:47a24e0797e9705a3750d6f79e5fc59f548b6b2d74e19df47fbc909c48dc6df8
Port: <none>
Host Port: <none>
State: Running
Started: Sat, 28 Aug 2021 09:14:58 +0800
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Sat, 28 Aug 2021 09:14:56 +0800
Finished: Sat, 28 Aug 2021 09:14:57 +0800
Ready: True
Restart Count: 1
Environment: <none>
Mounts:
/etc/asterisk from config (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-sfqbn (ro)
config:
Container ID: docker://78449250d13f3dd818ea1cb95b31549190555decf884ec9c3b0e9c90ccf60a22
Image: cycoresystems/asterisk-config:v0.9.1
Image ID: docker-pullable://cycoresystems/asterisk-config@sha256:287a892b776febe8a550313459fee857918bc10e9e3f5fc80e5575e6df21cf05
Port: <none>
Host Port: <none>
State: Waiting
Reason: CrashLoopBackOff
Las```
t State: Terminated
Reason: Error
Exit Code: 1
Started: Sat, 28 Aug 2021 10:40:52 +0800
Finished: Sat, 28 Aug 2021 10:41:00 +0800
Ready: False
Restart Count: 21
Environment: <none>
Mounts:
/etc/asterisk from config (rw)
/source from custom (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-sfqbn (ro)
natsgw:
Container ID: docker://8656d0d1911bf89d2398ebb9e2b2dd1143373a806afec5432972db09c5292a31
Image: cycoresystems/ari-proxy:v5.0.1
Image ID: docker-pullable://cycoresystems/ari-proxy@sha256:ac7a7f3c59ca79e2eecd1d911c82caac9deba19cd8f8a9a781e72ce67ec43dde
Port: <none>
Host Port: <none>
State: Running
Started: Sat, 28 Aug 2021 09:14:57 +0800
Ready: True
Restart Count: 0
Environment:
NATS_URI: nats://nats:4222
ARI_APPLICATION: demo
ARI_USERNAME: admin
ARI_PASSWORD: admin
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-sfqbn (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
config:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
custom:
Type: Secret (a volume populated by a Secret)
SecretName: asterisk-config
Optional: false
kube-api-access-sfqbn:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Pulled 14m (x20 over 89m) kubelet Container image "cycoresystems/asterisk-config:v0.9.1" already present on machine
Warning BackOff 4m10s (x380 over 89m) kubelet Back-off restarting failed container`
``
Good afternoon!
Tell me what is my mistake.
POD kamailio CrashLoopBackOff: ERROR: bad config file (3 errors):
parse error in config file /data/kamailio/local.k, line 4, column 36: ip address, interface name or hostname expected
POD asterisk CrashLoopBackOff container config: ERROR failed to render defaults: template: t: 14: 25: executing "t" at <.Network>: error calling Network: invalid response
Tell me what is the problem?
Thank.
Hi! I have watched your Astricon conference and I think it's amazing what you have been able to achieve with VoIP and Kubernetes. I want to get hands-on practice on the live-demo but Kamailio won't start and that's because its configuration file is empty. What was the configuration that you used for the demo? Thanks!
I labeled 1 node with cloud.google.com/gke-nodepool=pool-kamailio
kubectl apply -f 01-nats.yaml
kubectl label nodes $(kubectl get nodes | grep gke | awk -F ' ' 'NR==1{print $1}') cloud.google.com/gke-nodepool=pool-kamailio --overwrite
kubectl apply -f kamailio.yaml
kubectl apply -f asterisk.yaml
kubectl apply -f app.yaml
so the DaemonSet launches the pod in one of the cluster nodes.
The "kamailio" container in the kamailio-xxx pod is failing though:
$ kubectl get po
NAME READY STATUS RESTARTS AGE
asterisk-1744660152-8msl9 3/3 Running 13 1d
app-3527931237-jg899 1/1 Running 0 4h
kamailio-t9bjr 2/3 CrashLoopBackOff 6 10m
The error:
$ kubectl logs kamailio-t9bjr -c kamailio
2017-08-24T00:18:25Z gke-foo-cluster-default-pool-72561ba1-992g confd[13]: INFO Backend set to env
2017-08-24T00:18:25Z gke-foo-cluster-default-pool-72561ba1-992g confd[13]: INFO Starting confd
2017-08-24T00:18:25Z gke-foo-cluster-default-pool-72561ba1-992g confd[13]: INFO Backend nodes set to
2017-08-24T00:18:25Z gke-foo-cluster-default-pool-72561ba1-992g confd[13]: INFO /etc/kamailio/kamailio.cfg has md5sum 17481ad2235ef9698da57c6e90d5ac2b should be 469d897d2dde81f6320357a41712c89f
2017-08-24T00:18:25Z gke-foo-cluster-default-pool-72561ba1-992g confd[13]: INFO Target config /etc/kamailio/kamailio.cfg out of sync
2017-08-24T00:18:25Z gke-foo-cluster-default-pool-72561ba1-992g confd[13]: INFO Target config /etc/kamailio/kamailio.cfg has been updated
0(1) : <core> [cfg.y:3368]: yyerror_at(): parse error in config file /etc/kamailio/kamailio.cfg, line 35, column 68-74: syntax error
0(1) : <core> [cfg.y:3368]: yyerror_at(): parse error in config file /etc/kamailio/kamailio.cfg, line 35, column 68-74: invalid host or interface name
0(1) : <core> [cfg.y:3371]: yyerror_at(): parse error in config file /etc/kamailio/kamailio.cfg, line 35, column 75:
ERROR: bad config file (3 errors)
Looks like the software expects a specific checksum on the configuration file, then replace it and fails with the default values.
Any workaround?
Hi,
Thanks very much for your demo - it's been the only thing I've found that may address my SIP routing issues!
Though, I've been stuck on one problem for a week... I'm hoping someone could help me over this hurdle.
I'm running minikube on a Centos 7 VM.
Everything is Running with the exception of the kamailio pod, which is in CrashLoopBackOff.
Kubectl describe says the pod can't find /app:
exec: "/app": stat /app: no such file or directory: unknown
Any debug help would be much appreciated!
Thank you,
DRE
Commands and editing done:
$ minikube delete
$ minikube start
$ sudo swapoff -a
$ mkdir CyCore; cd CyCore
$ git clone https://github.com/CyCoreSystems/asterisk-k8s-demo.git
$ cd asterisk-k8s-demo/live-demo/k8s
$ vi 02-kamailio.yaml // change CLOUD to "", change nodeSelector to "type: kamailio"
$ vi 03-asterisk.yaml // change CLOUD to ""
$ kubectl label nodes minikube type=kamailio // So kamailio pod will run on minikube node
$ kubectl apply -f 00-namespace.yaml // so secret in voip will apply successfully
$ cd ../..
// edited inbound.conf.tmpl, created config zip.
$ kubectl -n voip create secret generic asterisk-config --from-file=asterisk-config.zip
$ cd live-demo/k8s
$ kubectl apply -f 01-nats.yaml
$ kubectl apply -f 02-kamailio.yaml
$ kubectl apply -f 03-asterisk.yaml
Results:
$ kubectl get all --namespace=voip
NAME READY STATUS RESTARTS AGE
pod/asterisk-758996b56d-t56c9 3/3 Running 4 95s
pod/kamailio-b96hs 2/3 CrashLoopBackOff 5 7m14s
pod/nats-666d56d6b8-q4bb5 1/1 Running 0 20m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/asterisk ClusterIP 10.105.56.62 <none> 5060/UDP 20m
service/kamailio ClusterIP 10.110.250.161 <none> 5060/UDP 20m
service/nats ClusterIP 10.104.131.110 <none> 4222/TCP,6222/TCP,8222/TCP 20m
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/kamailio 1 1 0 1 0 type=kamailio 20m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/asterisk 1/1 1 1 20m
deployment.apps/nats 1/1 1 1 20m
NAME DESIRED CURRENT READY AGE
replicaset.apps/asterisk-758996b56d 1 1 1 20m
replicaset.apps/nats-666d56d6b8 1 1 1 20m
$ kubectl describe pod kamailio-b96hs --namespace=voip
Name: kamailio-b96hs
Namespace: voip
Priority: 0
Node: minikube/192.168.49.2
Start Time: Thu, 19 Aug 2021 08:56:05 -0400
Labels: component=kamailio
controller-revision-hash=5d4dd5d7cf
pod-template-generation=3
Annotations: <none>
Status: Running
IP: 192.168.49.2
IPs:
IP: 192.168.49.2
Controlled By: DaemonSet/kamailio
Containers:
kamailio:
Container ID: docker://90752fe442a294a2c37c44303d45dd6114dfe356663a40cfd7f403716331c7cc
Image: cycoresystems/kamailio
Image ID: docker-pullable://cycoresystems/kamailio@sha256:4a0804ab228a8eecd4abcf520a499af6119b4b30ae90a28abeec3f4008dc178b
Port: <none>
Host Port: <none>
State: Running
Started: Thu, 19 Aug 2021 08:57:52 -0400
Ready: True
Restart Count: 0
Environment:
CLOUD:
Mounts:
/data/kamailio from config (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-82wpn (ro)
rtpproxy:
Container ID: docker://4a879cbfe529ee7c98efc452148b74caabeebbf6c93b8439839c4aa28cb9f69f
Image: cycoresystems/rtpproxy
Image ID: docker-pullable://cycoresystems/rtpproxy@sha256:e1443ca3b3a2f75cd0f26fb10e439cd6e920883d2ab1784962e56e2c01526beb
Port: <none>
Host Port: <none>
State: Running
Started: Thu, 19 Aug 2021 08:58:08 -0400
Ready: True
Restart Count: 0
Environment:
CLOUD:
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-82wpn (ro)
dispatchers:
Container ID: docker://73389818732a94e43e3d8a62398b80f901aa6a1e8189569dc1f38a2e764a8ea4
Image: cycoresystems/dispatchers
Image ID: docker-pullable://cycoresystems/dispatchers@sha256:95f9cefb9d8454a907832f5d02d28a7f76f79e70c9a53c9c9a3aad4c700f27a0
Port: <none>
Host Port: <none>
Command:
/app
-set
voip:asterisk=1:5080
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: ContainerCannotRun
Message: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "/app": stat /app: no such file or directory: unknown
Exit Code: 127
Started: Thu, 19 Aug 2021 09:01:29 -0400
Finished: Thu, 19 Aug 2021 09:01:29 -0400
Ready: False
Restart Count: 5
Environment: <none>
Mounts:
/data/kamailio from config (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-82wpn (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
config:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
default-token-82wpn:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-82wpn
Optional: false
QoS Class: BestEffort
Node-Selectors: type=kamailio
Tolerations: node.kubernetes.io/disk-pressure:NoSchedule op=Exists
node.kubernetes.io/memory-pressure:NoSchedule op=Exists
node.kubernetes.io/network-unavailable:NoSchedule op=Exists
node.kubernetes.io/not-ready:NoExecute op=Exists
node.kubernetes.io/pid-pressure:NoSchedule op=Exists
node.kubernetes.io/unreachable:NoExecute op=Exists
node.kubernetes.io/unschedulable:NoSchedule op=Exists
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 7m25s default-scheduler Successfully assigned voip/kamailio-b96hs to minikube
Normal Pulling 7m24s kubelet Pulling image "cycoresystems/kamailio"
Normal Pulled 5m39s kubelet Successfully pulled image "cycoresystems/kamailio" in 1m45.372032898s
Normal Created 5m38s kubelet Created container kamailio
Normal Started 5m38s kubelet Started container kamailio
Normal Pulling 5m38s kubelet Pulling image "cycoresystems/rtpproxy"
Normal Pulled 5m22s kubelet Successfully pulled image "cycoresystems/rtpproxy" in 16.111961198s
Normal Created 5m22s kubelet Created container rtpproxy
Normal Started 5m22s kubelet Started container rtpproxy
Normal Pulled 5m7s kubelet Successfully pulled image "cycoresystems/dispatchers" in 15.121616868s
Normal Pulled 5m2s kubelet Successfully pulled image "cycoresystems/dispatchers" in 3.614521805s
Warning Failed 4m44s (x3 over 5m6s) kubelet Error: failed to start container "dispatchers": Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "/app": stat /app: no such file or directory: unknown
Normal Pulled 4m44s kubelet Successfully pulled image "cycoresystems/dispatchers" in 4.063114355s
Normal Pulling 4m21s (x4 over 5m22s) kubelet Pulling image "cycoresystems/dispatchers"
Normal Created 4m13s (x4 over 5m6s) kubelet Created container dispatchers
Normal Pulled 4m13s kubelet Successfully pulled image "cycoresystems/dispatchers" in 8.398882695s
Warning BackOff 2m18s (x12 over 4m44s) kubelet Back-off restarting failed container
I've been experiencing an intermittent issue but I'm not sure if it's related with the AudioSocket application or with asterisk-config. Every now and then, I get a message from Asterisk that says "No application 'AudioSocket' for extension (inbound, voicedemo, 9)" and after restarting the pod everything works as expected.
Any hints on what could be causing this?
This is my modules.conf (I added the audiosocket modules that are not included in this repo):
[modules]
autoload = yes
; This is a minimal module load. We are loading only the modules required for
; the Asterisk features used in the Super Awesome Company configuration.
; Applications
load = app_bridgewait.so
load = app_dial.so
load = app_playback.so
load = app_stack.so
load = app_verbose.so
load = app_voicemail.so
load = app_directory.so
load = app_confbridge.so
load = app_stasis.so
load = app_system.so
load = app_audiosocket.so
; Bridging
load = bridge_builtin_features.so
load = bridge_builtin_interval_features.so
load = bridge_holding.so
load = bridge_native_rtp.so
load = bridge_simple.so
load = bridge_softmix.so
; Call Detail Records
load = cdr_custom.so
; Channel Drivers
load = chan_bridge_media.so
load = chan_audiosocket.so
load = chan_pjsip.so
noload = chan_sip.so
; Codecs
load = codec_gsm.so
load = codec_resample.so
load = codec_ulaw.so
load = codec_g722.so
; Formats
load = format_gsm.so
load = format_pcm.so
load = format_wav_gsm.so
load = format_wav.so
; Functions
load = func_callerid.so
load = func_cdr.so
load = func_pjsip_endpoint.so
load = func_sorcery.so
load = func_devstate.so
load = func_strings.so
; Core/PBX
load = pbx_config.so
; Resources
load = res_audiosocket.so
load = res_musiconhold.so
load = res_pjproject.so
load = res_pjsip_acl.so
load = res_pjsip_authenticator_digest.so
load = res_pjsip_caller_id.so
load = res_pjsip_dialog_info_body_generator.so
load = res_pjsip_diversion.so
load = res_pjsip_dtmf_info.so
load = res_pjsip_endpoint_identifier_anonymous.so
load = res_pjsip_endpoint_identifier_ip.so
load = res_pjsip_endpoint_identifier_user.so
load = res_pjsip_exten_state.so
load = res_pjsip_header_funcs.so
load = res_pjsip_logger.so
load = res_pjsip_messaging.so
load = res_pjsip_mwi_body_generator.so
load = res_pjsip_mwi.so
load = res_pjsip_nat.so
load = res_pjsip_notify.so
load = res_pjsip_one_touch_record_info.so
load = res_pjsip_outbound_authenticator_digest.so
load = res_pjsip_outbound_publish.so
load = res_pjsip_outbound_registration.so
load = res_pjsip_path.so
load = res_pjsip_pidf_body_generator.so
load = res_pjsip_pidf_digium_body_supplement.so
load = res_pjsip_pidf_eyebeam_body_supplement.so
load = res_pjsip_publish_asterisk.so
load = res_pjsip_pubsub.so
load = res_pjsip_refer.so
;load = res_pjsip_registrar_expire.so
load = res_pjsip_registrar.so
load = res_pjsip_rfc3326.so
load = res_pjsip_sdp_rtp.so
load = res_pjsip_send_to_voicemail.so
load = res_pjsip_session.so
load = res_pjsip.so
load = res_pjsip_t38.so
load = res_pjsip_transport_websocket.so
load = res_pjsip_xpidf_body_generator.so
load = res_rtp_asterisk.so
load = res_sorcery_astdb.so
load = res_sorcery_config.so
load = res_sorcery_memory.so
load = res_sorcery_realtime.so
load = res_stasis_answer.so
load = res_stasis_device_state.so
load = res_stasis_playback.so
load = res_stasis_recording.so
load = res_stasis_snoop.so
load = res_stasis.so
load = res_ari_applications.so
load = res_ari_asterisk.so
load = res_ari_bridges.so
load = res_ari_channels.so
load = res_ari_device_states.so
load = res_ari_endpoints.so
load = res_ari_events.so
load = res_ari_model.so
load = res_ari_playbacks.so
load = res_ari_recordings.so
load = res_ari_sounds.so
load = res_ari.so
load = res_timing_timerfd.so
Thanks and regards,
Congratulations on this amazing demo! It's truly inspiring. I have been wondering on how this could be improved and thought that in case that the Google Speech Recognition does not work properly because I have a speech impediment or it's just too noisy, it would be useful to use the keyboard to state how many Asterisk replicas I want.
What would be the best approach to handle this? Maybe some logic should be pushed to Asterisk in order to determine when it should send the audio to the audiosocket or when to wait for DTMF. Looking forward to know your opinion on this.
Hi Sean and others,
My apologies for creating this issue since I don't know a better way to approach you for help.
I've setup the asterisk demo according to your wonderful documentation.
My current state is
My dumb question is how I can test/verify the system is working? In your demo I didn't see the detailed steps. And now with all the services default to ClusterIP I don't know how to tested them from my local hosts. More specifically, I'm looking to
Any help is much appreciated!
Thanks a lot,
Ming
I was excited about Kamailio operator presentation given by CyCore Systems at Kamaillio World 2019, it was great.
It was mentioned that the Kamaillio operator is opensourced so I thought it would be used in this demo, but I can't find anything about it in this repo (or any other repos from CycoreSystems). Would it be possible to share some information about it?
Please forgive me if that's the wrong way/place to ask and feel free to close the issue
Is any way to make SIP in Kubernetes work on AWS ?
When i do expose my Kamailio outside:
k expose deployment kamailio-sip --name kamailio-sip-udp --type LoadBalancer --port 5060 --target-port 5060 --protocol UDP
It doesn't work on AWS EKS, i got ERROR:
Warning SyncLoadBalancerFailed 4m57s (x16 over 55m) service-controller Error syncing load balancer: failed to ensure load balancer: Protocol UDP not supported by LoadBalancer
And if even i make it work with manually configured AWS NLB, the SIP routing is broken:
reqest:
SIP UAC --> sip --> AWS LB -> sip --> pod
reply:
pod --> sip --> default route --> SIP UAC
Bob--------------------------AWS LB----------------------SIP Pod-----------EKS node external ip
|-----------REGISTER------- >| -------REGISTER---------- >|
|<----------------------------------200 OK-------------------------------------------|
The SIP reply messages going directly via k8s node external IP.
Thanks for any recomendations.
Can I have your email?
Hi Sean, I am struggling to register an external endpoint in Asterisk as the endpoint identification method is by IP and every SIP message coming from Kamailio gets linked to the "proxies" endpoint.
If the identification method was changed to username, then all the incoming calls from the PSTN proxied through Kamailio wouldn't find an endpoint and the solution would stop working. Is there a way to allow this demo setup to be compatible with external endpoint registration?
I have already changed the Kamailio config to pass through all REGISTER messages to Asterisk.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.