私は、SIP インフラを移動するプロジェクトに取り組んでいます。GCPに。
プライベート IP を持つ UDP 内部ロード バランサーを使用して、Asterisk から Kamailio SBC に通話をルーティングしています。Asterisk は、ロード バランサーのアドレス IP を単一の発信エンドポイントとして構成されています。
内部 UDP ロード バランサーは、5060 フロントエンド、2 つの SBC を備えたバックエンド、およびポート 80 での基本的な http ヘルス チェックで動作します。
各 kamailio SBC で、ヘルス チェックのためにポート 5060 にアプリケーションをリストし、ポート 80 に Apache サーバーをリストしているため、httpd を停止するとインスタンスのステータスが異常に変わります。
転送ルール
# gcloud compute forwarding-rules describe ip-gateway-internal-lb-local-fontend --region=europe-west3
IPAddress: 10.156.0.15
IPProtocol: UDP
backendService: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3/backendServices/My-gateway-internal-lb-bservices
creationTimestamp: '2018-01-30T10:20:19.564-08:00'
description: ''
id: 'XXXXXXXXXXXXX'
kind: compute#forwardingRule
loadBalancingScheme: INTERNAL
name: ip-gateway-internal-lb-local-fontend
network: https://www.googleapis.com/compute/v1/projects/My-Project/global/networks/default
ports:
- '5060'
region: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3
selfLink: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3/forwardingRules/ip-gateway-internal-lb-local-fontend
subnetwork: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3/subnetworks/default
バックエンド サービス
# gcloud compute backend-services describe My-gateway-internal-lb-bservices --region=europe-west3
backends:
- balancingMode: CONNECTION
description: ''
group: https://www.googleapis.com/compute/v1/projects/My-Project/zones/europe-west3-a/instanceGroups/My-gateway-1xx
connectionDraining:
drainingTimeoutSec: 0
creationTimestamp: '2018-01-30T10:15:10.688-08:00'
description: ''
fingerprint: XXXXXXXXX
healthChecks:
- https://www.googleapis.com/compute/v1/projects/My-Project/global/healthChecks/basic-check-internal-http
id: 'XXXXXXXXX'
kind: compute#backendService
loadBalancingScheme: INTERNAL
name: My-gateway-internal-lb-bservices
protocol: UDP
region: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3
selfLink: https://www.googleapis.com/compute/v1/projects/My-Project/regions/europe-west3/backendServices/My-gateway-internal-lb-bservices
sessionAffinity: NONE
timeoutSec: 3
健康診断
# gcloud compute health-checks describe basic-check-internal-http
checkIntervalSec: 3
creationTimestamp: '2018-01-31T01:13:25.030-08:00'
description: ''
healthyThreshold: 2
httpHealthCheck:
host: ''
port: 80
proxyHeader: NONE
requestPath: /
id: 'XXXXXXXXXXXXXXXXXXXX'
kind: compute#healthCheck
name: basic-check-internal-http
selfLink: https://www.googleapis.com/compute/v1/projects/My-Project/global/healthChecks/basic-check-internal-http
timeoutSec: 3
type: HTTP
unhealthyThreshold: 2
すべてのタイムアウトは 3 秒に設定されます。セッション アフィニティ (永続性) によって実行される内部 UDP LB ルート ルールはすぐには削除されません。削除されるまでに約 15 分 (トラフィックなし) かかります。
インスタンスが再び正常な場合と同じケースで、LB によって考慮されてトラフィックの受信を開始するのに 15 分かかります。
外部アドレス IP で UDP ロード バランサーを使用していた場合、この問題は発生しませんでした。これは、トラフィックを送信するアスタリスク アドレスがネイテッドであるため、5 タプル ハッシュが呼び出しごとに異なるためです。
しかし、内部 IP を使用する UDP LB では、5 タプル ハッシュは常に同じ (同じ src/dst IP:Port) であるため、セッション アフィニティ (永続性) ルールのタイムアウトを構成したり、私のメモリを強制的にフラッシュしたりする方法ポンド。
多分それはバグです!誰かが同じ問題に遭遇しましたか? ありがとう、誰かがこの問題で私を助けてくれるかどうか楽しみにしていますか?
BR、ウス