Skip to content

Go Panic using BGP on CentOS 7.4 / K8S 1.10.1 #250

Description

@FireDrunk

Is this a bug report or a feature request?:
Bug Report

What happened:
After succesfully connecting BGP to my pfSense router and activating the first LoadBalancer service the Speaker pod crashed.

What you expected to happen:
An activated LoadBalancer IP, and a working pod with the attached IP.

How to reproduce it (as minimally and precisely as possible):
ConfigMap

config:
----
peers:
- peer-address: 10.0.24.1
  peer-asn: 64512
  my-asn: 64512
address-pools:
- name: default
  protocol: bgp
  addresses:
  - 10.2.2.0/24

Anything else we need to know?:
The BGP status was active before the crash (without setting a service type to LoadBalancer).
My router was activly communicationg via BGP with the Speaker and all was running well.

After adding the LoadBalancer type to my service, the Speaker crashed, and the bgp connection went down.

BGP neighbor is 10.0.24.41, remote AS 65512
 Description: k8s-master-001
  BGP version 4, remote router-id 10.0.24.41
  BGP state = Idle
  Last read 00:02:53, holdtime 240s, keepalive interval 80s

  Message statistics:
                  Sent       Received  
  Opens                 2120       2120
  Notifications         2120          0
  Updates                  0          0
  Keepalives               0          0
  Route Refresh            0          0
  Total                 4240       2120

  Update statistics:
                  Sent       Received  
  Updates                  0          0
  Withdraws                0          0
  End-of-Rib               0          0

  Last error: AS unacceptable

After inspecting the container in docker, I saw the following crash:

"caller":"bgp.go:62","event":"sessionUp","localASN":64512,"msg":"BGP session established","peer":"10.0.24.1:179","peerASN":64512,"ts":"2018-04-24T11:29:15.761696909Z"}
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x52b8d6]
goroutine 27 [running]:
bytes.(*Buffer).WriteTo(0xc420290230, 0x0, 0x0, 0x7fb6a6f72e78, 0xc420290230, 0xc42050db01)
	/usr/local/go/src/bytes/buffer.go:242 +0x96
io.copyBuffer(0x0, 0x0, 0x18fbd40, 0xc420290230, 0x0, 0x0, 0x0, 0x0, 0xc42000e870, 0xc42050dcd0)
	/usr/local/go/src/io/io.go:382 +0x30a
io.Copy(0x0, 0x0, 0x18fbd40, 0xc420290230, 0x4, 0xc420311800, 0x0)
	/usr/local/go/src/io/io.go:362 +0x68
go.universe.tf/metallb/internal/bgp.sendUpdate(0x0, 0x0, 0x0, 0xc42040a408, 0x4, 0x4, 0xc420311800, 0xc420302380, 0x581ce2)
	/go/src/go.universe.tf/metallb/internal/bgp/messages.go:307 +0x273
go.universe.tf/metallb/internal/bgp.(*Session).sendUpdates(0xc4205905b0, 0xc4201ae600)
	/go/src/go.universe.tf/metallb/internal/bgp/bgp.go:88 +0x247
go.universe.tf/metallb/internal/bgp.(*Session).run(0xc4205905b0)
	/go/src/go.universe.tf/metallb/internal/bgp/bgp.go:64 +0x4a7
created by go.universe.tf/metallb/internal/bgp.New
	/go/src/go.universe.tf/metallb/internal/bgp/bgp.go:305 +0x408

Environment:

  • MetalLB version: 0.6.1
  • Kubernetes version: 1.10.1
  • BGP router type/version: pfSense 2.4.1
  • OS (e.g. from /etc/os-release): CentOS 7.4 fully patched (as per 24-02-2018)
  • Kernel (e.g. uname -a): 3.10.0-693.21.1

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions