В GKE вы можете использовать два типа Ingress. Один из них - Nginx Ingress
, который вы, вероятно, хотели использовать на основе аннотации kubernetes.io/ingress.class: "nginx"
. Второй - GKE Ingress.
1. GKE Ingress
Если вы хотите использовать GKE Ingress
, вам нужно указать свою услугу как NodePort
и применить Ingress
. Основываясь на ваших YAML, я воспроизвел его.
Поскольку вы использовали свое собственное изображение, я использовал nginx image.
apiVersion: apps/v1
kind: Deployment
metadata:
name: mycha-deploy
labels:
app: mycha-app
spec:
replicas: 1
selector:
matchLabels:
app: mycha-app
template:
metadata:
labels:
app: mycha-app
spec:
containers:
- name: mycha-container
image: nginx
ports:
- containerPort: 80
---
#added type: Nodeport
apiVersion: v1
kind: Service
metadata:
name: mycha-svc
labels:
app: mycha-app
spec:
type: NodePort
selector:
app: mycha-app
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
---
#removed annotation, as here we are using GKE Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mycha-ingress
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: mycha-svc
servicePort: 80
deployment.apps/mycha-deploy created
service/mycha-svc created
ingress.extensions/mycha-ingress created
Вы должны увидеть вывод, как показано ниже:
$ kubectl get pods,svc,ing
NAME READY STATUS RESTARTS AGE
pod/mycha-deploy-685f894996-xbbnv 1/1 Running 0 38s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.99.0.1 <none> 443/TCP 33d
service/mycha-svc NodePort 10.99.13.51 <none> 80:30808/TCP 39s
NAME HOSTS ADDRESS PORTS AGE
ingress.extensions/mycha-ingress * 34.107.251.59 80 3m3s
Теперь вы сможете свернуть свой sv c.
$ curl 34.107.251.59
...
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
Поскольку вы используете GKE Ingress, ваш Ingress
будет автоматически получать EXTERNAL-IP. Если вы сохраните service
как ClusterIP
, он не получит никаких Address
.
$ kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
mycha-ingress * 80 34m
В манифесте службы обратите внимание, что типом является NodePort. Это обязательный тип для Ingress, который используется для настройки балансировщика нагрузки HTTP (S). Более подробную информацию можно найти здесь .
2. Nginx Ingress on GKE
Когда вы используете Nginx Ingress
, вы можете указать свою службу как ClusterIP
или NodePort
.
Для этого вам необходимо правильно развернуть Nginx Ingress
. Хороший туториал можно найти здесь , однако он немного устарел. Я публикую ниже обновленные шаги:
- Установка Helm v3 . Эта версия не требует
tiller
. - Добавить правильный репозиторий для
Helm 3
. Подробности можно найти здесь .
Добавление и обновление репо:
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com
"stable" has been added to your repositories
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈
- Применить развертывание mnet и службу (
NodePort
или ClusterIP
, при использовании Nginx Ingress
оба типа будут работать). - Развертывание
Nginx Ingress
с использованием $ helm install --name nginx-ingress stable/nginx-ingress
. Это создаст 2 deployments
и 2 services
. Один из сервисов будет создан как LoadBalancer
. - Вход для развертывания
С annotation.kubernetes.io/ingress.class: "nginx"
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mycha-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: mycha-svc
servicePort: 80
Вы должны иметь такой вывод:
$ kk get pods,svc,ing
NAME READY STATUS RESTARTS AGE
pod/mycha-deploy-c469dc58b-mdp6d 1/1 Running 0 2m41s
pod/nginx-ingress-controller-5d47f75dfc-d6xnl 1/1 Running 0 7m18s
pod/nginx-ingress-default-backend-f5b888f7d-rf5cx 1/1 Running 0 7m18s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.99.0.1 <none> 443/TCP 33d
service/mycha-svc ClusterIP 10.99.8.140 <none> 80/TCP 2m12s
service/nginx-ingress-controller LoadBalancer 10.99.11.177 34.90.172.116 80:31593/TCP,443:30104/TCP 7m19s
service/nginx-ingress-default-backend ClusterIP 10.99.7.106 <none> 80/TCP 7m19s
NAME HOSTS ADDRESS PORTS AGE
ingress.extensions/mycha-ingress * 80 17s
Ваш Ingress
не получит Address
, так как service/nginx-ingress-controller
будет работать как LoadBalancer.
Теперь вы можете проверить, все ли работает, используя curl.
$ curl 34.90.172.116
<!DOCTYPE html>
...
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>