Код-ревью Middle Service и Ingress обновлено
Ревью: Service и Ingress
Вопрос
Поды Deployment имеют метки app: shop, tier: api и слушают порт 3000. Найди ошибки в манифестах.
apiVersion: v1
kind: Service
metadata:
name: shop-api
spec:
type: NodePort
selector:
app: shop-api
ports:
- port: 80
targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: shop
spec:
rules:
- host: shop.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: shop
port:
number: 80
Коротко
Исправленные манифесты: Хорошая привычка: давать порту контейнера имя (name: http) и ссылаться на него targetPort: http, тогда смена номера порта не ломает сервис.
Что должен найти ревьюер
- Безопасностьстрока 6NodePort не нужен за Ingress: он открывает порт на каждом узле в обход Ingress. Достаточно ClusterIP.
- Ошибкастрока 8Селектор
app: shop-apiне совпадает с метками подовapp: shop: эндпоинтов не будет. Нужноapp: shop, tier: api. - Ошибкастрока 11
targetPort: 8080, а приложение слушает 3000: соединения будут отклонены. - Ошибкастрока 17Нет
ingressClassName: если в кластере нет класса по умолчанию, Ingress не будет обработан ни одним контроллером. - Безопасностьстрока 19Нет секции
tls: трафик идёт по HTTP без шифрования. Нужен TLS-секрет (например, от cert-manager). - Ошибкастрока 26Бэкенд ссылается на сервис
shop, а сервис называетсяshop-api.
Разбор
Исправленные манифесты:
apiVersion: v1
kind: Service
metadata:
name: shop-api
spec:
selector:
app: shop
tier: api
ports:
- port: 80
targetPort: 3000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: shop
spec:
ingressClassName: nginx
tls:
- hosts: [shop.example.com]
secretName: shop-tls
rules:
- host: shop.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: shop-api
port:
number: 80
Хорошая привычка: давать порту контейнера имя (name: http) и ссылаться на него targetPort: http, тогда смена номера порта не ломает сервис.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.