d5f5db7005
Recent versions of cri-o and containerd are passing K8S_POD_UID as a CNI argument, alongside with K8S_POD_NAMESPACE and K8S_POD_NAME. As both latter variables cannot be used to safely identify a pod in the API (StatefulSet recreates pods with the same name), we were prone to race conditions in the CNI code that we could only workaround. The end effect was mostly IP conflict. Now that the UID argument is passed, we're able to compare the UID from the request with the one in the API to make sure we're wiring the correct pod. This commit implements that by making sure to move the check to the code actually waiting for the pod to appear in the registry. In case of K8S_POD_UID missing from the CNI request, API call to retrieve Pod is used as a fallback. We also know that this check doesn't work for static pods, so CRD and controller needed to be updated to include information if the pod is static on the KuryrPort spec, so that we can skip the check for the static pods without the need to fetch Pod from the API. Closes-Bug: 1963677 Change-Id: I5ef6a8212c535e90dee049a579c1483644d56db8
55 lines
1.4 KiB
YAML
55 lines
1.4 KiB
YAML
apiVersion: apiextensions.k8s.io/v1
|
|
kind: CustomResourceDefinition
|
|
metadata:
|
|
name: kuryrports.openstack.org
|
|
spec:
|
|
group: openstack.org
|
|
scope: Namespaced
|
|
names:
|
|
plural: kuryrports
|
|
singular: kuryrport
|
|
kind: KuryrPort
|
|
shortNames:
|
|
- kp
|
|
versions:
|
|
- name: v1
|
|
served: true
|
|
storage: true
|
|
schema:
|
|
openAPIV3Schema:
|
|
type: object
|
|
properties:
|
|
spec:
|
|
type: object
|
|
required:
|
|
- podUid
|
|
- podNodeName
|
|
properties:
|
|
podUid:
|
|
type: string
|
|
podNodeName:
|
|
type: string
|
|
podStatic:
|
|
type: boolean
|
|
status:
|
|
type: object
|
|
required:
|
|
- vifs
|
|
properties:
|
|
vifs:
|
|
type: object
|
|
x-kubernetes-preserve-unknown-fields: true
|
|
additionalPrinterColumns:
|
|
- name: PodUID
|
|
type: string
|
|
description: Pod UID
|
|
jsonPath: .spec.podUid
|
|
- name: Nodename
|
|
type: string
|
|
description: Name of the node corresponding pod lives in
|
|
jsonPath: .spec.podNodeName
|
|
- name: labels
|
|
type: string
|
|
description: Labels for the CRD
|
|
jsonPath: .metadata.labels
|