Code Monkey home page Code Monkey logo

asterisk-k8s-demo's People

Contributors

ulexus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

asterisk-k8s-demo's Issues

vicidial en go

Looks like the groundwork has been done to port vicidial to go? ๐Ÿ˜œ

SIP in k8s question(s)

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?

Recognition Client Closes after a certain amount of time and/or hangup

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?

Getting started, need help!

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!

Ability to Transfer to PTSN from behind NAT

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%?

Issues deploying to on-premise kubernetes cluster

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:

  • Followed the instructions on the README.md
  • Update the CLOUD variable to "" (instead of gcp)
  • I did not update the asterisk-config's inbound file as my priority is to have something up and running

Issues I'm facing:

Asterisk config container CrashLoopBackOff

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

Kamailio dispatchers CrashLoopBackOff

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.

Kamailio container is running with errors

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.

Configuration Users

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.

Asterisk CrashLoopBackOff

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`
``

Pod asterisk & kamailio CrashLoopBackOff

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.

Kamailio.cfg

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!

bad config file

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?

Dispatchers container causing my kamailio pod to CrashLoopBackOff in on-premise k8s cluster

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

No application 'AudioSocket' for extension (inbound, voicedemo, 9)

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,

DTMF Support

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.

How to connect to Kamailio with it's current deployment

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
image

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

  1. Create some extensions/inbound rules
  2. Register to the created extensions
  3. Call between these extensions

Any help is much appreciated!

Thanks a lot,
Ming

Can't find kamailio operator related parts

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

Can't expose UDP on AWS EKS

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.

Support external endpoint registration

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.