Я пытаюсь представить развертывание, используя Ingress, где DeamonSet имеет hostNetwork=true
, что позволило бы мне пропустить дополнительный уровень LoadBalancer и выставить мой сервис непосредственно на IP внешнего узла Kubernetes.К сожалению, я не могу получить доступ к контроллеру Ingress из внешней сети.
Я использую Kubernetes версии 1.11.16-gke.2 на GCP.
Я настроил свой новый кластер следующим образом:
gcloud container clusters get-credentials gcp-cluster
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
helm init --service-account tiller --upgrade
helm install --name ingress --namespace ingress-nginx --set rbac.create=true,controller.kind=DaemonSet,controller.service.type=ClusterIP,controller.hostNetwork=true stable/nginx-ingress
Я запускаю развертывание:
cat <<EOF | kubectl create -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-node
spec:
selector:
matchLabels:
app: hello-node
template:
metadata:
labels:
app: hello-node
spec:
containers:
- name: hello-node
image: gcr.io/google-samples/node-hello:1.0
ports:
- containerPort: 8080
EOF
Затем создаю службу:
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Service
metadata:
name: hello-node
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: hello-node
EOF
и входной ресурс:
cat <<EOF | kubectl create -f -
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: hello-node-single-ingress
spec:
backend:
serviceName: hello-node
servicePort: 80
EOF
Iполучить внешний IP-адрес узла:
12:50 $ kubectl get nodes -o json | jq '.items[] | .status .addresses[] | select(.type=="ExternalIP") | .address'
"35.197.204.75"
Проверить, запущен ли вход:
12:50 $ kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
hello-node-single-ingress * 35.197.204.75 80 8m
12:50 $ kubectl get pods --namespace ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-ingress-controller-7kqgz 1/1 Running 0 23m
ingress-nginx-ingress-default-backend-677b99f864-tg6db 1/1 Running 0 23m
12:50 $ kubectl get svc --namespace ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-ingress-controller ClusterIP 10.43.250.102 <none> 80/TCP,443/TCP 24m
ingress-nginx-ingress-default-backend ClusterIP 10.43.255.43 <none> 80/TCP 24m
Затем попытаться подключиться из внешней сети:
curl 35.197.204.75
К сожалению, этовремя ожидания
На Kubernetes Github есть страница, посвященная настройке ingress-nginx (host-netork: true): https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#via-the-host-network
, в которой упоминается:
"Этот подход не использует какой-либо объект Service для предоставления доступа контроллеру NGINX. Если в целевом кластере существует служба ingress-nginx, рекомендуется удалить ее. "
Я пытался следоватьи удалите ingress-nginx
сервисы:
kubectl delete svc --namespace ingress-nginx ingress-nginx-ingress-controller ingress-nginx-ingress-default-backend
, но это не поможет.
Есть идеи hДолжны ли настроить Ingress на узле внешний IP?Что я делаю не так?Количество путаницы по поводу надежного запуска Ingress без LB ошеломляет меня.Любая помощь приветствуется!
РЕДАКТИРОВАТЬ: Когда создается другая служба, которая обращается к моему развертыванию с помощью NodePort
:
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Service
metadata:
name: hello-node2
spec:
ports:
- port: 80
targetPort: 8080
type: NodePort
selector:
app: hello-node
EOF
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node ClusterIP 10.47.246.91 <none> 80/TCP 2m
hello-node2 NodePort 10.47.248.51 <none> 80:31151/TCP 6s
Я все еще не могу получить доступ к моей службе, например, используя: curl 35.197.204.75:31151
.
Однако, когда я создаю третий сервис с типом LoadBalancer:
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Service
metadata:
name: hello-node3
spec:
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
selector:
app: hello-node
EOF
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node ClusterIP 10.47.246.91 <none> 80/TCP 7m
hello-node2 NodePort 10.47.248.51 <none> 80:31151/TCP 4m
hello-node3 LoadBalancer 10.47.250.47 35.189.106.111 80:31367/TCP 56s
, я могу получить доступ к своему сервису с помощью внешнего LB: 35.189.106.111
IP.