Skip to content

Commit 13e0b96

Browse files
committed
kubernetes version awareness
1 parent 73c8e93 commit 13e0b96

File tree

7 files changed

+85
-11
lines changed

7 files changed

+85
-11
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# v0.1.8
2+
3+
Released 2019-10-22
4+
5+
- several HAProxy fixes
6+
- introduce env variable `PFSENSE_DEBUG` to log all pfSense xmlrpc traffic
7+
- more robust logging for failure scenarios
8+
- k8s version awareness to prep for deprecations of several API endpoints

controller.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,16 @@
5151
//'storeName' => $controllerName.'-controller-store',
5252
];
5353

54-
$controller = new KubernetesController\Controller($controllerName, $kubernetesClient, $options);
54+
$controller = new KubernetesPfSenseController\Controller($controllerName, $kubernetesClient, $options);
55+
$kubernetesClient = $controller->getKubernetesClient();
5556

56-
// registry
57+
// register pfSenseClient
5758
$controller->setRegistryItem('pfSenseClient', $pfSenseClient);
5859

60+
// register kubernetes version info
61+
$kubernetesVersionInfo = $kubernetesClient->request("/version");
62+
$controller->setRegistryItem('kubernetesVersionInfo', $kubernetesVersionInfo);
63+
5964
// plugins
6065
$controller->registerPlugin('\KubernetesPfSenseController\Plugin\MetalLB');
6166
$controller->registerPlugin('\KubernetesPfSenseController\Plugin\HAProxyDeclarative');

examples/declarative-example.yaml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,17 @@ data:
105105
email_level:
106106
email_to:
107107
errorfiles:
108-
#- type: frontend
108+
- type: frontend
109109
# pass through directly to mimic config.xml structure
110-
#definition:
111-
# ...
110+
# many more options available, review your config.xml for more detail
111+
definition:
112+
name: some-frontend-name
113+
type: http
114+
forwardfor: yes
115+
status: active
116+
backend_serverpool: some-backend-name
117+
a_extaddr:
118+
item:
119+
- extaddr: wan_ipv4
120+
extaddr_port: 443
121+
extaddr_ssl: yes
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace KubernetesPfSenseController;
4+
5+
class Controller extends \KubernetesController\Controller
6+
{
7+
public function getKubernetesVersionInfo()
8+
{
9+
return $this->getRegistryItem('kubernetesVersionInfo');
10+
}
11+
12+
public function getKubernetesVersionMajorMinor()
13+
{
14+
$versionInfo = $this->getKubernetesVersionInfo();
15+
16+
return $versionInfo['major'].'.'.$versionInfo['minor'];
17+
}
18+
}

src/KubernetesPfSenseController/Plugin/DNSHAProxyIngressProxy.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,20 @@ public function init()
3333
{
3434
$controller = $this->getController();
3535

36+
// 1.20 will kill the old version
37+
// https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/
38+
$kubernetesMajorMinor = $controller->getKubernetesVersionMajorMinor();
39+
if (\Composer\Semver\Comparator::greaterThanOrEqualTo($kubernetesMajorMinor, '1.14')) {
40+
$ingressResourcePath = '/apis/networking.k8s.io/v1beta1/ingresses';
41+
$ingressResourceWatchPath = '/apis/networking.k8s.io/v1beta1/watch/ingresses';
42+
} else {
43+
$ingressResourcePath = '/apis/extensions/v1beta1/ingresses';
44+
$ingressResourceWatchPath = '/apis/extensions/v1beta1/watch/ingresses';
45+
}
46+
3647
// initial load of ingresses
3748
$params = [];
38-
$ingresses = $controller->getKubernetesClient()->request('/apis/extensions/v1beta1/ingresses', 'GET', $params);
49+
$ingresses = $controller->getKubernetesClient()->request($ingressResourcePath, 'GET', $params);
3950
$this->state['ingresses'] = $ingresses['items'];
4051

4152
// watch for ingress changes
@@ -45,7 +56,7 @@ public function init()
4556
$options = [
4657
'trigger' => false,
4758
];
48-
$watch = $controller->getKubernetesClient()->createWatch('/apis/extensions/v1beta1/watch/ingresses', $params, $this->getWatchCallback('ingresses', $options));
59+
$watch = $controller->getKubernetesClient()->createWatch($ingressResourceWatchPath, $params, $this->getWatchCallback('ingresses', $options));
4960
$this->addWatch($watch);
5061

5162
$this->generateHash();

src/KubernetesPfSenseController/Plugin/DNSIngresses.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,23 @@ public function init()
2828
$ingressLabelSelector = $pluginConfig['serviceLabelSelector'];
2929
$ingressFieldSelector = $pluginConfig['serviceFieldSelector'];
3030

31+
// 1.20 will kill the old version
32+
// https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/
33+
$kubernetesMajorMinor = $controller->getKubernetesVersionMajorMinor();
34+
if (\Composer\Semver\Comparator::greaterThanOrEqualTo($kubernetesMajorMinor, '1.14')) {
35+
$ingressResourcePath = '/apis/networking.k8s.io/v1beta1/ingresses';
36+
$ingressResourceWatchPath = '/apis/networking.k8s.io/v1beta1/watch/ingresses';
37+
} else {
38+
$ingressResourcePath = '/apis/extensions/v1beta1/ingresses';
39+
$ingressResourceWatchPath = '/apis/extensions/v1beta1/watch/ingresses';
40+
}
41+
3142
// initial load of ingresses
3243
$params = [
3344
'labelSelector' => $ingressLabelSelector,
3445
'fieldSelector' => $ingressFieldSelector,
3546
];
36-
$ingresses = $controller->getKubernetesClient()->request('/apis/extensions/v1beta1/ingresses', 'GET', $params);
47+
$ingresses = $controller->getKubernetesClient()->request($ingressResourcePath, 'GET', $params);
3748
$this->state['resources'] = $ingresses['items'];
3849

3950
// watch for ingress changes
@@ -42,7 +53,7 @@ public function init()
4253
'fieldSelector' => $ingressFieldSelector,
4354
'resourceVersion' => $ingresses['metadata']['resourceVersion'],
4455
];
45-
$watch = $controller->getKubernetesClient()->createWatch('/apis/extensions/v1beta1/watch/ingresses', $params, $this->getWatchCallback('resources'));
56+
$watch = $controller->getKubernetesClient()->createWatch($ingressResourceWatchPath, $params, $this->getWatchCallback('resources'));
4657
$this->addWatch($watch);
4758
$this->delayedAction();
4859
}

src/KubernetesPfSenseController/Plugin/HAProxyIngressProxy.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,23 @@ public function init()
5252
$ingressLabelSelector = $pluginConfig['ingressLabelSelector'];
5353
$ingressFieldSelector = $pluginConfig['ingressFieldSelector'];
5454

55+
// 1.20 will kill the old version
56+
// https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/
57+
$kubernetesMajorMinor = $controller->getKubernetesVersionMajorMinor();
58+
if (\Composer\Semver\Comparator::greaterThanOrEqualTo($kubernetesMajorMinor, '1.14')) {
59+
$ingressResourcePath = '/apis/networking.k8s.io/v1beta1/ingresses';
60+
$ingressResourceWatchPath = '/apis/networking.k8s.io/v1beta1/watch/ingresses';
61+
} else {
62+
$ingressResourcePath = '/apis/extensions/v1beta1/ingresses';
63+
$ingressResourceWatchPath = '/apis/extensions/v1beta1/watch/ingresses';
64+
}
65+
5566
// initial load of ingresses
5667
$params = [
5768
'labelSelector' => $ingressLabelSelector,
5869
'fieldSelector' => $ingressFieldSelector,
5970
];
60-
$ingresses = $controller->getKubernetesClient()->request('/apis/extensions/v1beta1/ingresses', 'GET', $params);
71+
$ingresses = $controller->getKubernetesClient()->request($ingressResourcePath, 'GET', $params);
6172
$this->state['ingresses'] = $ingresses['items'];
6273

6374
// watch for ingress changes
@@ -66,7 +77,7 @@ public function init()
6677
'fieldSelector' => $ingressFieldSelector,
6778
'resourceVersion' => $ingresses['metadata']['resourceVersion'],
6879
];
69-
$watch = $controller->getKubernetesClient()->createWatch('/apis/extensions/v1beta1/watch/ingresses', $params, $this->getWatchCallback('ingresses'));
80+
$watch = $controller->getKubernetesClient()->createWatch($ingressResourceWatchPath, $params, $this->getWatchCallback('ingresses'));
7081
$this->addWatch($watch);
7182

7283
$this->delayedAction();

0 commit comments

Comments
 (0)