Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug 1894194: Delete ports created for host networking pods #393

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
24 changes: 17 additions & 7 deletions kuryr_kubernetes/controller/drivers/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -344,20 +344,30 @@ def get_networkpolicies(namespace=None):
return nps.get('items', [])


def zip_resources(xs, ys):
"""Returns tuples of resources matched by namespace and name.

:param xs: List of objects x, first level of iteration.
:param ys: List of objects y.
:return: List of tuples of matching (x, y)
"""
pairs = []
for x in xs:
for y in ys:
if utils.get_res_unique_name(x) == utils.get_res_unique_name(y):
pairs.append((x, y))
break
return pairs


def zip_knp_np(knps, nps):
"""Returns tuples of matching KuryrNetworkPolicy and NetworkPolicy objs.

:param knps: List of KuryrNetworkPolicy objects
:param nps: List of NetworkPolicy objects
:return: List of tuples of matching (knp, np)
"""
pairs = []
for knp in knps:
for np in nps:
if utils.get_res_unique_name(knp) == utils.get_res_unique_name(np):
pairs.append((knp, np))
break
return pairs
return zip_resources(knps, nps)


def match_expressions(expressions, labels):
Expand Down
6 changes: 5 additions & 1 deletion kuryr_kubernetes/controller/handlers/kuryrport.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,11 @@ def on_finalize(self, kuryrport_crd):
raise
return

if 'deletionTimestamp' not in pod['metadata']:
# FIXME(dulek): hostNetwork condition can be removed once we know we
# won't upgrade from version creating ports for host
# networking pods.
if ('deletionTimestamp' not in pod['metadata'] and
not driver_utils.is_host_network(pod)):
# NOTE(gryf): Ignore deleting KuryrPort, since most likely it was
# removed manually, while we need vifs for corresponding pod
# object which apperantely is still running.
Expand Down
20 changes: 20 additions & 0 deletions kuryr_kubernetes/controller/handlers/vif.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,26 @@ class VIFHandler(k8s_base.ResourceEventHandler):
def __init__(self):
super(VIFHandler, self).__init__()

# NOTE(dulek): We should get rid of that once we're sure we won't
# upgrade from a version that may have unnecessary ports
# created for host networking pods.
self._delete_host_networking_ports()

def _delete_host_networking_ports(self):
k8s = clients.get_kubernetes_client()
pods = k8s.get('/api/v1/pods')['items']
kuryrports = k8s.get(constants.K8S_API_CRD_KURYRPORTS)['items']
pairs = driver_utils.zip_resources(kuryrports, pods)
for kuryrport, pod in pairs:
if driver_utils.is_host_network(pod):
LOG.warning(f'Found unnecessary KuryrPort '
f'{utils.get_res_unique_name(kuryrport)} created '
f'for host networking pod. Deleting it.')
try:
k8s.delete(kuryrport['metadata']['selfLink'])
except k_exc.K8sResourceNotFound:
pass

def on_present(self, pod):
if (driver_utils.is_host_network(pod) or
not self._is_pod_scheduled(pod)):
Expand Down