123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686 |
- #!/bin/bash
- # Copyright 2019 The Kubernetes Authors.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- # A small smoke test to run against a just-deployed kube-up cluster with Windows
- # nodes. Performs checks such as:
- # 1) Verifying that all Windows nodes have status Ready.
- # 2) Verifying that no system pods are attempting to run on Windows nodes.
- # 3) Verifying pairwise connectivity between most of the following: Linux
- # pods, Windows pods, K8s services, and the Internet.
- # 4) Verifying that basic DNS resolution works in Windows pods.
- #
- # This script assumes that it is run from the root of the kubernetes repository.
- #
- # TODOs:
- # - Implement the node-to-pod checks.
- # - Capture stdout for each command to a file and only print it when the test
- # fails.
- # - Move copy-pasted code into reusable functions.
- # - Continue running all checks after one fails.
- # - Test service connectivity by running a test pod with an http server and
- # exposing it as a service (rather than curl-ing from existing system
- # services that don't serve http requests).
- # - Add test retries for transient errors, such as:
- # "error: unable to upgrade connection: Authorization error
- # (user=kube-apiserver, verb=create, resource=nodes, subresource=proxy)"
- # Override this to use a different kubectl binary.
- kubectl=kubectl
- linux_deployment_timeout=60
- windows_deployment_timeout=180
- output_file=/tmp/k8s-smoke-test.out
- function check_windows_nodes_are_ready {
- # kubectl filtering is the worst.
- statuses=$(${kubectl} get nodes -l beta.kubernetes.io/os=windows \
- -o jsonpath='{.items[*].status.conditions[?(@.type=="Ready")].status}')
- for status in $statuses; do
- if [[ $status == "False" ]]; then
- echo "ERROR: some Windows node has status != Ready"
- echo "kubectl get nodes -l beta.kubernetes.io/os=windows"
- ${kubectl} get nodes -l beta.kubernetes.io/os=windows
- exit 1
- fi
- done
- echo "Verified that all Windows nodes have status Ready"
- }
- function untaint_windows_nodes {
- # Untaint the windows nodes to allow test workloads without tolerations to be
- # scheduled onto them.
- WINDOWS_NODES=$(${kubectl} get nodes -l beta.kubernetes.io/os=windows -o name)
- for node in $WINDOWS_NODES; do
- ${kubectl} taint node "$node" node.kubernetes.io/os:NoSchedule-
- done
- }
- function check_no_system_pods_on_windows_nodes {
- windows_system_pods=$(${kubectl} get pods --namespace kube-system \
- -o wide | grep -E "Pending|windows" | wc -w)
- if [[ $windows_system_pods -ne 0 ]]; then
- echo "ERROR: there are kube-system pods trying to run on Windows nodes"
- echo "kubectl get pods --namespace kube-system -o wide"
- ${kubectl} get pods --namespace kube-system -o wide
- exit 1
- fi
- echo "Verified that all system pods are running on Linux nodes"
- }
- linux_webserver_deployment=linux-nginx
- linux_webserver_pod_label=nginx
- linux_webserver_replicas=1
- function deploy_linux_webserver_pod {
- echo "Writing example deployment to $linux_webserver_deployment.yaml"
- cat <<EOF > $linux_webserver_deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: $linux_webserver_deployment
- labels:
- app: $linux_webserver_pod_label
- spec:
- replicas: $linux_webserver_replicas
- selector:
- matchLabels:
- app: $linux_webserver_pod_label
- template:
- metadata:
- labels:
- app: $linux_webserver_pod_label
- spec:
- containers:
- - name: nginx
- image: nginx:1.7.9
- nodeSelector:
- beta.kubernetes.io/os: linux
- EOF
- if ! ${kubectl} create -f $linux_webserver_deployment.yaml; then
- echo "kubectl create -f $linux_webserver_deployment.yaml failed"
- exit 1
- fi
- timeout=$linux_deployment_timeout
- while [[ $timeout -gt 0 ]]; do
- echo "Waiting for $linux_webserver_replicas Linux $linux_webserver_pod_label pods to become Ready"
- statuses=$(${kubectl} get pods -l app=$linux_webserver_pod_label \
- -o jsonpath='{.items[*].status.conditions[?(@.type=="Ready")].status}' \
- | grep "True" | wc -w)
- if [[ $statuses -eq $linux_webserver_replicas ]]; then
- break
- else
- sleep 10
- (( timeout=timeout-10 ))
- fi
- done
- if [[ $timeout -gt 0 ]]; then
- echo "All $linux_webserver_pod_label pods became Ready"
- else
- echo "ERROR: Not all $linux_webserver_pod_label pods became Ready"
- echo "kubectl get pods -l app=$linux_webserver_pod_label"
- ${kubectl} get pods -l app=$linux_webserver_pod_label
- cleanup_deployments
- exit 1
- fi
- }
- # Returns the name of an arbitrary Linux webserver pod.
- function get_linux_webserver_pod_name {
- $kubectl get pods -l app=$linux_webserver_pod_label \
- -o jsonpath='{.items[0].metadata.name}'
- }
- # Returns the IP address of an arbitrary Linux webserver pod.
- function get_linux_webserver_pod_ip {
- $kubectl get pods -l app=$linux_webserver_pod_label \
- -o jsonpath='{.items[0].status.podIP}'
- }
- function undeploy_linux_webserver_pod {
- ${kubectl} delete deployment $linux_webserver_deployment
- }
- linux_command_deployment=linux-ubuntu
- linux_command_pod_label=ubuntu
- linux_command_replicas=1
- function deploy_linux_command_pod {
- echo "Writing example deployment to $linux_command_deployment.yaml"
- cat <<EOF > $linux_command_deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: $linux_command_deployment
- labels:
- app: $linux_command_pod_label
- spec:
- replicas: $linux_command_replicas
- selector:
- matchLabels:
- app: $linux_command_pod_label
- template:
- metadata:
- labels:
- app: $linux_command_pod_label
- spec:
- containers:
- - name: ubuntu
- image: ubuntu
- command: ["sleep", "123456"]
- nodeSelector:
- beta.kubernetes.io/os: linux
- EOF
- if ! ${kubectl} create -f $linux_command_deployment.yaml; then
- echo "kubectl create -f $linux_command_deployment.yaml failed"
- exit 1
- fi
- timeout=$linux_deployment_timeout
- while [[ $timeout -gt 0 ]]; do
- echo "Waiting for $linux_command_replicas Linux $linux_command_pod_label pods to become Ready"
- statuses=$(${kubectl} get pods -l app=$linux_command_pod_label \
- -o jsonpath='{.items[*].status.conditions[?(@.type=="Ready")].status}' \
- | grep "True" | wc -w)
- if [[ $statuses -eq $linux_command_replicas ]]; then
- break
- else
- sleep 10
- (( timeout=timeout-10 ))
- fi
- done
- if [[ $timeout -gt 0 ]]; then
- echo "All $linux_command_pod_label pods became Ready"
- else
- echo "ERROR: Not all $linux_command_pod_label pods became Ready"
- echo "kubectl get pods -l app=$linux_command_pod_label"
- ${kubectl} get pods -l app=$linux_command_pod_label
- cleanup_deployments
- exit 1
- fi
- }
- # Returns the name of an arbitrary Linux command pod.
- function get_linux_command_pod_name {
- $kubectl get pods -l app=$linux_command_pod_label \
- -o jsonpath='{.items[0].metadata.name}'
- }
- # Returns the IP address of an arbitrary Linux command pod.
- function get_linux_command_pod_ip {
- $kubectl get pods -l app=$linux_command_pod_label \
- -o jsonpath='{.items[0].status.podIP}'
- }
- # Installs test executables (ping, curl) in the Linux command pod.
- # NOTE: this assumes that there is only one Linux "command pod".
- # TODO(pjh): fix this.
- function prepare_linux_command_pod {
- local linux_command_pod
- linux_command_pod="$(get_linux_command_pod_name)"
- echo "Installing test utilities in Linux command pod, may take a minute"
- $kubectl exec "$linux_command_pod" -- apt-get update > /dev/null
- $kubectl exec "$linux_command_pod" -- \
- apt-get install -y iputils-ping curl > /dev/null
- }
- function undeploy_linux_command_pod {
- ${kubectl} delete deployment $linux_command_deployment
- }
- windows_webserver_deployment=windows-nettest
- windows_webserver_pod_label=nettest
- windows_webserver_replicas=1
- function deploy_windows_webserver_pod {
- echo "Writing example deployment to $windows_webserver_deployment.yaml"
- cat <<EOF > $windows_webserver_deployment.yaml
- # You can run a pod with the e2eteam/nettest:1.0 image (which should listen on
- # <podIP>:8080) and create another pod on a different node (linux would be
- # easier) to curl the http server:
- # curl http://<pod_ip>:8080/read
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: $windows_webserver_deployment
- labels:
- app: $windows_webserver_pod_label
- spec:
- replicas: $windows_webserver_replicas
- selector:
- matchLabels:
- app: $windows_webserver_pod_label
- template:
- metadata:
- labels:
- app: $windows_webserver_pod_label
- spec:
- containers:
- - name: nettest
- image: e2eteam/nettest:1.0
- nodeSelector:
- beta.kubernetes.io/os: windows
- tolerations:
- - effect: NoSchedule
- key: node.kubernetes.io/os
- operator: Equal
- value: windows
- EOF
- if ! ${kubectl} create -f $windows_webserver_deployment.yaml; then
- echo "kubectl create -f $windows_webserver_deployment.yaml failed"
- exit 1
- fi
- timeout=$windows_deployment_timeout
- while [[ $timeout -gt 0 ]]; do
- echo "Waiting for $windows_webserver_replicas Windows $windows_webserver_pod_label pods to become Ready"
- statuses=$(${kubectl} get pods -l app=$windows_webserver_pod_label \
- -o jsonpath='{.items[*].status.conditions[?(@.type=="Ready")].status}' \
- | grep "True" | wc -w)
- if [[ $statuses -eq $windows_webserver_replicas ]]; then
- break
- else
- sleep 10
- (( timeout=timeout-10 ))
- fi
- done
- if [[ $timeout -gt 0 ]]; then
- echo "All $windows_webserver_pod_label pods became Ready"
- else
- echo "ERROR: Not all $windows_webserver_pod_label pods became Ready"
- echo "kubectl get pods -l app=$windows_webserver_pod_label"
- ${kubectl} get pods -l app=$windows_webserver_pod_label
- cleanup_deployments
- exit 1
- fi
- }
- function get_windows_webserver_pod_name {
- $kubectl get pods -l app=$windows_webserver_pod_label \
- -o jsonpath='{.items[0].metadata.name}'
- }
- function get_windows_webserver_pod_ip {
- $kubectl get pods -l app=$windows_webserver_pod_label \
- -o jsonpath='{.items[0].status.podIP}'
- }
- function undeploy_windows_webserver_pod {
- ${kubectl} delete deployment $windows_webserver_deployment
- }
- windows_command_deployment=windows-powershell
- windows_command_pod_label=powershell
- windows_command_replicas=1
- function deploy_windows_command_pod {
- echo "Writing example deployment to $windows_command_deployment.yaml"
- cat <<EOF > $windows_command_deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: $windows_command_deployment
- labels:
- app: $windows_command_pod_label
- spec:
- replicas: $windows_command_replicas
- selector:
- matchLabels:
- app: $windows_command_pod_label
- template:
- metadata:
- labels:
- app: $windows_command_pod_label
- spec:
- containers:
- - name: nettest
- image: e2eteam/nettest:1.0
- nodeSelector:
- beta.kubernetes.io/os: windows
- tolerations:
- - effect: NoSchedule
- key: node.kubernetes.io/os
- operator: Equal
- value: windows
- EOF
- if ! ${kubectl} create -f $windows_command_deployment.yaml; then
- echo "kubectl create -f $windows_command_deployment.yaml failed"
- exit 1
- fi
- timeout=$windows_deployment_timeout
- while [[ $timeout -gt 0 ]]; do
- echo "Waiting for $windows_command_replicas Windows $windows_command_pod_label pods to become Ready"
- statuses=$(${kubectl} get pods -l app=$windows_command_pod_label \
- -o jsonpath='{.items[*].status.conditions[?(@.type=="Ready")].status}' \
- | grep "True" | wc -w)
- if [[ $statuses -eq $windows_command_replicas ]]; then
- break
- else
- sleep 10
- (( timeout=timeout-10 ))
- fi
- done
- if [[ $timeout -gt 0 ]]; then
- echo "All $windows_command_pod_label pods became Ready"
- else
- echo "ERROR: Not all $windows_command_pod_label pods became Ready"
- echo "kubectl get pods -l app=$windows_command_pod_label"
- ${kubectl} get pods -l app=$windows_command_pod_label
- cleanup_deployments
- exit 1
- fi
- }
- function get_windows_command_pod_name {
- $kubectl get pods -l app=$windows_command_pod_label \
- -o jsonpath='{.items[0].metadata.name}'
- }
- function get_windows_command_pod_ip {
- $kubectl get pods -l app=$windows_command_pod_label \
- -o jsonpath='{.items[0].status.podIP}'
- }
- function undeploy_windows_command_pod {
- ${kubectl} delete deployment $windows_command_deployment
- }
- function test_linux_node_to_linux_pod {
- echo "TODO: ${FUNCNAME[0]}"
- }
- function test_linux_node_to_windows_pod {
- echo "TODO: ${FUNCNAME[0]}"
- }
- function test_linux_pod_to_linux_pod {
- echo "TEST: ${FUNCNAME[0]}"
- local linux_command_pod
- linux_command_pod="$(get_linux_command_pod_name)"
- local linux_webserver_pod_ip
- linux_webserver_pod_ip="$(get_linux_webserver_pod_ip)"
- if ! $kubectl exec "$linux_command_pod" -- curl -m 20 \
- "http://$linux_webserver_pod_ip" &> $output_file; then
- cleanup_deployments
- echo "Failing output: $(cat $output_file)"
- echo "FAILED: ${FUNCNAME[0]}"
- exit 1
- fi
- }
- # TODO(pjh): this test flakily fails on brand-new clusters, not sure why.
- # % Total % Received % Xferd Average Speed Time Time Time Current
- # Dload Upload Total Spent Left Speed
- # 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
- # curl: (6) Could not resolve host:
- # command terminated with exit code 6
- function test_linux_pod_to_windows_pod {
- echo "TEST: ${FUNCNAME[0]}"
- local linux_command_pod
- linux_command_pod="$(get_linux_command_pod_name)"
- local windows_webserver_pod_ip
- windows_webserver_pod_ip="$(get_windows_webserver_pod_ip)"
- if ! $kubectl exec "$linux_command_pod" -- curl -m 20 \
- "http://$windows_webserver_pod_ip:8080/read" &> $output_file; then
- cleanup_deployments
- echo "Failing output: $(cat $output_file)"
- echo "FAILED: ${FUNCNAME[0]}"
- echo "This test seems to be flaky. TODO(pjh): investigate."
- exit 1
- fi
- }
- function test_linux_pod_to_internet {
- echo "TEST: ${FUNCNAME[0]}"
- local linux_command_pod
- linux_command_pod="$(get_linux_command_pod_name)"
- local internet_ip="8.8.8.8" # Google DNS
- # This is expected to return 404 (not found).
- if ! $kubectl exec "$linux_command_pod" -- curl -m 20 \
- "http://$internet_ip" > $output_file; then
- cleanup_deployments
- echo "Failing output: $(cat $output_file)"
- echo "FAILED: ${FUNCNAME[0]}"
- exit 1
- fi
- }
- function test_linux_pod_to_k8s_service {
- echo "TEST: ${FUNCNAME[0]}"
- local linux_command_pod
- linux_command_pod="$(get_linux_command_pod_name)"
- local service="heapster"
- local service_ip
- service_ip=$($kubectl get service --namespace kube-system $service \
- -o jsonpath='{.spec.clusterIP}')
- local service_port
- service_port=$($kubectl get service --namespace kube-system $service \
- -o jsonpath='{.spec.ports[?(@.protocol=="TCP")].port}')
- echo "curl-ing $service address from Linux pod: $service_ip:$service_port"
- # curl-ing the heapster service results in an expected 404 response code. The
- # curl command does not set a failure return code in this case.
- if ! $kubectl exec "$linux_command_pod" -- \
- curl -m 20 "http://$service_ip:$service_port" &> $output_file; then
- cleanup_deployments
- echo "Failing output: $(cat $output_file)"
- echo "FAILED: ${FUNCNAME[0]}"
- exit 1
- fi
- }
- function test_windows_node_to_linux_pod {
- echo "TODO: ${FUNCNAME[0]}"
- }
- function test_windows_node_to_windows_pod {
- echo "TODO: ${FUNCNAME[0]}"
- }
- # TODO(pjh): this test failed for me once with
- # error: unable to upgrade connection: container not found ("nettest")
- # Maybe the container crashed for some reason? Investigate if it happens more.
- #
- # TODO(pjh): another one-time failure:
- # error: unable to upgrade connection: Authorization error
- # (user=kube-apiserver, verb=create, resource=nodes, subresource=proxy)
- function test_windows_pod_to_linux_pod {
- echo "TEST: ${FUNCNAME[0]}"
- local windows_command_pod
- windows_command_pod="$(get_windows_command_pod_name)"
- local linux_webserver_pod_ip
- linux_webserver_pod_ip="$(get_linux_webserver_pod_ip)"
- if ! $kubectl exec "$windows_command_pod" -- powershell.exe \
- "curl -UseBasicParsing http://$linux_webserver_pod_ip" > \
- $output_file; then
- cleanup_deployments
- echo "Failing output: $(cat $output_file)"
- echo "FAILED: ${FUNCNAME[0]}"
- exit 1
- fi
- }
- function test_windows_pod_to_windows_pod {
- echo "TEST: ${FUNCNAME[0]}"
- local windows_command_pod
- windows_command_pod="$(get_windows_command_pod_name)"
- local windows_webserver_pod_ip
- windows_webserver_pod_ip="$(get_windows_webserver_pod_ip)"
- if ! $kubectl exec "$windows_command_pod" -- powershell.exe \
- "curl -UseBasicParsing http://$windows_webserver_pod_ip:8080/read" \
- > $output_file; then
- cleanup_deployments
- echo "Failing output: $(cat $output_file)"
- echo "FAILED: ${FUNCNAME[0]}"
- exit 1
- fi
- }
- function test_windows_pod_to_internet {
- echo "TEST: ${FUNCNAME[0]}"
- local windows_command_pod
- windows_command_pod="$(get_windows_command_pod_name)"
- local internet_ip="8.8.8.8"
- # This snippet tests Internet connectivity without depending on DNS by
- # attempting to curl Google's well-known DNS IP, 8.8.8.8. On success we expect
- # to get back a 404 status code; on failure the response object will have a
- # status code of 0 or some other HTTP code.
- if ! $kubectl exec "$windows_command_pod" -- powershell.exe \
- "\$response = try { \`
- (curl -UseBasicParsing http://$internet_ip \`
- -ErrorAction Stop).BaseResponse \`
- } catch [System.Net.WebException] { \`
- \$_.Exception.Response \`
- }; \`
- \$statusCodeInt = [int]\$response.StatusCode; \`
- if (\$statusCodeInt -eq 404) { \`
- exit 0 \`
- } else { \`
- Write-Host \"curl $internet_ip got unexpected status code \$statusCodeInt\"
- exit 1 \`
- }" > $output_file; then
- cleanup_deployments
- echo "Failing output: $(cat $output_file)"
- echo "FAILED: ${FUNCNAME[0]}"
- exit 1
- fi
- }
- function test_windows_pod_to_k8s_service {
- echo "TEST: ${FUNCNAME[0]}"
- local windows_command_pod
- windows_command_pod="$(get_windows_command_pod_name)"
- local service="heapster"
- local service_ip
- service_ip=$($kubectl get service --namespace kube-system $service \
- -o jsonpath='{.spec.clusterIP}')
- local service_port
- service_port=$($kubectl get service --namespace kube-system $service \
- -o jsonpath='{.spec.ports[?(@.protocol=="TCP")].port}')
- local service_address="$service_ip:$service_port"
- echo "curl-ing $service address from Windows pod: $service_address"
- # Performing a web request to the heapster service results in an expected 404
- # response; this code snippet filters out the expected 404 from other status
- # codes that indicate failure.
- if ! $kubectl exec "$windows_command_pod" -- powershell.exe \
- "\$response = try { \`
- (curl -UseBasicParsing http://$service_address \`
- -ErrorAction Stop).BaseResponse \`
- } catch [System.Net.WebException] { \`
- \$_.Exception.Response \`
- }; \`
- \$statusCodeInt = [int]\$response.StatusCode; \`
- if (\$statusCodeInt -eq 404) { \`
- exit 0 \`
- } else { \`
- Write-Host \"curl $service_address got unexpected status code \$statusCodeInt\"
- exit 1 \`
- }" > $output_file; then
- cleanup_deployments
- echo "Failing output: $(cat $output_file)"
- echo "FAILED: ${FUNCNAME[0]}"
- exit 1
- fi
- }
- function test_kube_dns_in_windows_pod {
- echo "TEST: ${FUNCNAME[0]}"
- local windows_command_pod
- windows_command_pod="$(get_windows_command_pod_name)"
- local service="kube-dns"
- local service_ip
- service_ip=$($kubectl get service --namespace kube-system $service \
- -o jsonpath='{.spec.clusterIP}')
- if ! $kubectl exec "$windows_command_pod" -- powershell.exe \
- "Resolve-DnsName www.bing.com -server $service_ip" > $output_file; then
- cleanup_deployments
- echo "Failing output: $(cat $output_file)"
- echo "FAILED: ${FUNCNAME[0]}"
- exit 1
- fi
- }
- function test_dns_just_works_in_windows_pod {
- echo "TEST: ${FUNCNAME[0]}"
- local windows_command_pod
- windows_command_pod="$(get_windows_command_pod_name)"
- if ! $kubectl exec "$windows_command_pod" -- powershell.exe \
- "curl -UseBasicParsing http://www.bing.com" > $output_file; then
- cleanup_deployments
- echo "Failing output: $(cat $output_file)"
- echo "FAILED: ${FUNCNAME[0]}"
- exit 1
- fi
- }
- function cleanup_deployments {
- undeploy_linux_webserver_pod
- undeploy_linux_command_pod
- undeploy_windows_webserver_pod
- undeploy_windows_command_pod
- }
- check_windows_nodes_are_ready
- untaint_windows_nodes
- check_no_system_pods_on_windows_nodes
- deploy_linux_webserver_pod
- deploy_linux_command_pod
- deploy_windows_webserver_pod
- deploy_windows_command_pod
- prepare_linux_command_pod
- echo ""
- test_linux_node_to_linux_pod
- test_linux_node_to_windows_pod
- test_linux_pod_to_linux_pod
- test_linux_pod_to_windows_pod
- test_linux_pod_to_k8s_service
- # Note: test_windows_node_to_k8s_service is not supported at this time.
- # https://docs.microsoft.com/en-us/virtualization/windowscontainers/kubernetes/common-problems#my-windows-node-cannot-access-my-services-using-the-service-ip
- test_windows_node_to_linux_pod
- test_windows_node_to_windows_pod
- test_windows_pod_to_linux_pod
- test_windows_pod_to_windows_pod
- test_windows_pod_to_internet
- test_windows_pod_to_k8s_service
- test_kube_dns_in_windows_pod
- test_dns_just_works_in_windows_pod
- echo ""
- cleanup_deployments
- echo "All tests passed!"
- exit 0
|