Add missing key check while lbaas member add

Add check for missing key during member addition for lbaas.
Since lbaasv2.0 API does not support UDP and dns seems to attempt
to add it, it fails readyness and liveness checks for
controller pod.

This happens for k8s-service with a mix of UDP and TCP ports.
In future (Stein release) when UDP LB is supported, it should
not be a problem.

Closes-Bug: 1792367

Change-Id: I73d26c43e924438c2eeba0ced185639f28731fea
This commit is contained in:
ashish.billore 2018-11-15 18:27:28 +09:00 committed by Ashish Billore
parent 124d2422ce
commit 5e44d17e87
2 changed files with 47 additions and 1 deletions

View File

@ -371,7 +371,11 @@ class LoadBalancerHandler(k8s_base.ResourceEventHandler):
if (target_ip, target_port) in current_targets:
continue
port_name = subset_port.get('name')
pool = pool_by_tgt_name[port_name]
try:
pool = pool_by_tgt_name[port_name]
except KeyError:
LOG.debug("No pool found for port: %r", port_name)
continue
# TODO(apuimedo): Do not pass subnet_id at all when in
# L3 mode once old neutron-lbaasv2 is not supported, as
# octavia does not require it

View File

@ -900,3 +900,45 @@ class TestLoadBalancerHandler(test_base.TestCase):
def test_set_lbaas_state(self):
self.skipTest("skipping until generalised annotation handling is "
"implemented")
@mock.patch('kuryr_kubernetes.controller.drivers.base'
'.PodSubnetsDriver.get_instance')
@mock.patch('kuryr_kubernetes.controller.drivers.base'
'.PodProjectDriver.get_instance')
@mock.patch('kuryr_kubernetes.controller.drivers.base'
'.LBaaSDriver.get_instance')
def test_add_new_members_udp(self, m_get_drv_lbaas,
m_get_drv_project, m_get_drv_subnets):
project_id = str(uuid.uuid4())
subnet_id = str(uuid.uuid4())
current_ip = '1.1.1.1'
current_targets = {
'1.1.1.101': (1001, 10001),
'1.1.1.111': (1001, 10001),
'1.1.1.201': (2001, 20001)}
expected_ip = '2.2.2.2'
expected_targets = {
'2.2.2.101': (1201, 12001),
'2.2.2.111': (1201, 12001),
'2.2.2.201': (2201, 22001)}
endpoints = self._generate_endpoints(expected_targets)
state = self._generate_lbaas_state(
current_ip, current_targets, project_id, subnet_id)
spec = self._generate_lbaas_spec(expected_ip, expected_targets,
project_id, subnet_id, 'UDP')
m_drv_lbaas = mock.Mock(wraps=FakeLBaaSDriver())
m_drv_project = mock.Mock()
m_drv_project.get_project.return_value = project_id
m_drv_subnets = mock.Mock()
m_drv_subnets.get_subnets.return_value = {
subnet_id: mock.sentinel.subnet}
m_get_drv_lbaas.return_value = m_drv_lbaas
m_get_drv_project.return_value = m_drv_project
m_get_drv_subnets.return_value = m_drv_subnets
handler = h_lbaas.LoadBalancerHandler()
member_added = handler._add_new_members(endpoints, state, spec)
self.assertEqual(member_added, False)
m_drv_lbaas.ensure_member.assert_not_called()