Browse Source
Merge pull request #529 from bogdando/netcheck
Merge pull request #529 from bogdando/netcheck
Add a k8s app for advanced e2e netcheck for DNSpull/656/head
committed by
GitHub
16 changed files with 220 additions and 11 deletions
Split View
Diff Options
-
41docs/netcheck.md
-
2inventory/group_vars/all.yml
-
17roles/dnsmasq/tasks/resolvconf.yml
-
21roles/download/defaults/main.yml
-
12roles/kubernetes-apps/ansible/defaults/main.yml
-
6roles/kubernetes-apps/ansible/tasks/calico-policy-controller.yml
-
10roles/kubernetes-apps/ansible/tasks/main.yaml
-
20roles/kubernetes-apps/ansible/tasks/netchecker.yml
-
2roles/kubernetes-apps/ansible/templates/calico-policy-controller.yml.j2
-
2roles/kubernetes-apps/ansible/templates/kubedns-rc.yml
-
2roles/kubernetes-apps/ansible/templates/kubedns-svc.yml
-
25roles/kubernetes-apps/ansible/templates/netchecker-agent-ds.yml
-
26roles/kubernetes-apps/ansible/templates/netchecker-agent-hostnet-ds.yml
-
21roles/kubernetes-apps/ansible/templates/netchecker-server-pod.yml
-
15roles/kubernetes-apps/ansible/templates/netchecker-server-svc.yml
-
9roles/kubernetes/node/meta/main.yml
@ -0,0 +1,41 @@ |
|||
Network Checker Application |
|||
=========================== |
|||
|
|||
With the ``deploy_netchecker`` var enabled (defaults to false), Kargo deploys a |
|||
Network Checker Application from the 3rd side `l23network/mcp-netchecker` docker |
|||
images. It consists of the server and agents trying to reach the server by usual |
|||
for Kubernetes applications network connectivity meanings. Therefore, this |
|||
automagically verifies a pod to pod connectivity via the cluster IP and checks |
|||
if DNS resolve is functioning as well. |
|||
|
|||
The checks are run by agents on a periodic basis and cover standard and host network |
|||
pods as well. The history of performed checks may be found in the agents' application |
|||
logs. |
|||
|
|||
To get the most recent and cluster-wide network connectivity report, run from |
|||
any of the cluster nodes: |
|||
``` |
|||
curl http://localhost:31081/api/v1/connectivity_check |
|||
``` |
|||
Note that Kargo does not invoke the check but only deploys the application, if |
|||
requested. |
|||
|
|||
There are related application specifc variables: |
|||
``` |
|||
netchecker_port: 31081 |
|||
agent_report_interval: 15 |
|||
netcheck_namespace: default |
|||
agent_img: "quay.io/l23network/mcp-netchecker-agent:v0.1" |
|||
server_img: "quay.io/l23network/mcp-netchecker-server:v0.1" |
|||
``` |
|||
|
|||
Note that the application verifies DNS resolve for FQDNs comprising only the |
|||
combination of the ``netcheck_namespace.dns_domain`` vars, for example the |
|||
``netchecker-service.default.cluster.local``. If you want to deploy the application |
|||
to the non default namespace, make sure as well to adjust the ``searchdomains`` var |
|||
so the resulting search domain records to contain that namespace, like: |
|||
|
|||
``` |
|||
search: foospace.cluster.local default.cluster.local ... |
|||
nameserver: ... |
|||
``` |
@ -0,0 +1,20 @@ |
|||
- name: Kubernetes Apps | Lay Down Netchecker Template |
|||
template: src={{item.file}} dest={{kube_config_dir}}/{{item.file}} |
|||
with_items: |
|||
- {file: netchecker-agent-ds.yml, type: ds, name: netchecker-agent} |
|||
- {file: netchecker-agent-hostnet-ds.yml, type: ds, name: netchecker-agent-hostnet} |
|||
- {file: netchecker-server-pod.yml, type: po, name: netchecker-server} |
|||
- {file: netchecker-server-svc.yml, type: svc, name: netchecker-service} |
|||
register: manifests |
|||
when: inventory_hostname == groups['kube-master'][0] |
|||
|
|||
- name: Kubernetes Apps | Start Netchecker Resources |
|||
kube: |
|||
name: "{{item.item.name}}" |
|||
namespace: "{{netcheck_namespace}}" |
|||
kubectl: "{{bin_dir}}/kubectl" |
|||
resource: "{{item.item.type}}" |
|||
filename: "{{kube_config_dir}}/{{item.item.file}}" |
|||
state: "{{item.changed | ternary('latest','present') }}" |
|||
with_items: "{{ manifests.results }}" |
|||
when: inventory_hostname == groups['kube-master'][0] |
@ -0,0 +1,25 @@ |
|||
apiVersion: extensions/v1beta1 |
|||
kind: DaemonSet |
|||
metadata: |
|||
labels: |
|||
app: netchecker-agent |
|||
name: netchecker-agent |
|||
namespace: {{ netcheck_namespace }} |
|||
spec: |
|||
template: |
|||
metadata: |
|||
name: netchecker-agent |
|||
labels: |
|||
app: netchecker-agent |
|||
spec: |
|||
containers: |
|||
- name: netchecker-agent |
|||
image: "{{ agent_img }}" |
|||
env: |
|||
- name: MY_POD_NAME |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: metadata.name |
|||
- name: REPORT_INTERVAL |
|||
value: '{{ agent_report_interval }}' |
|||
imagePullPolicy: {{ k8s_image_pull_policy }} |
@ -0,0 +1,26 @@ |
|||
apiVersion: extensions/v1beta1 |
|||
kind: DaemonSet |
|||
metadata: |
|||
labels: |
|||
app: netchecker-agent-hostnet |
|||
name: netchecker-agent-hostnet |
|||
namespace: {{ netcheck_namespace }} |
|||
spec: |
|||
template: |
|||
metadata: |
|||
name: netchecker-agent-hostnet |
|||
labels: |
|||
app: netchecker-agent-hostnet |
|||
spec: |
|||
hostNetwork: True |
|||
containers: |
|||
- name: netchecker-agent |
|||
image: "{{ agent_img }}" |
|||
env: |
|||
- name: MY_POD_NAME |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: metadata.name |
|||
- name: REPORT_INTERVAL |
|||
value: '{{ agent_report_interval }}' |
|||
imagePullPolicy: {{ k8s_image_pull_policy }} |
@ -0,0 +1,21 @@ |
|||
apiVersion: v1 |
|||
kind: Pod |
|||
metadata: |
|||
name: netchecker-server |
|||
labels: |
|||
app: netchecker-server |
|||
namespace: {{ netcheck_namespace }} |
|||
spec: |
|||
containers: |
|||
- name: netchecker-server |
|||
image: "{{ server_img }}" |
|||
env: |
|||
imagePullPolicy: {{ k8s_image_pull_policy }} |
|||
ports: |
|||
- containerPort: 8081 |
|||
hostPort: 8081 |
|||
- name: kubectl-proxy |
|||
image: "{{ kubectl_image }}" |
|||
imagePullPolicy: {{ k8s_image_pull_policy }} |
|||
args: |
|||
- proxy |
@ -0,0 +1,15 @@ |
|||
apiVersion: v1 |
|||
kind: Service |
|||
metadata: |
|||
name: netchecker-service |
|||
namespace: {{ netcheck_namespace }} |
|||
spec: |
|||
selector: |
|||
app: netchecker-server |
|||
ports: |
|||
- |
|||
protocol: TCP |
|||
port: 8081 |
|||
targetPort: 8081 |
|||
nodePort: {{ netchecker_port }} |
|||
type: NodePort |
Write
Preview
Loading…
Cancel
Save