В прошлой статье мы развернули первое приложение с помощью k8s, теперь мы можем использоватьIngress
Сделайте его доступным в Интернете (конечно, вы должны иметь собственное доменное имя и указать его правильно)
Ниже приведен официальный сайт для перемещенияIngress
Диаграмма для описания того, что делает Ingress. Если вы ничего об этом не знаете, вы можете понять это как традиционный nginx, который используется для настройки доменного имени вашего сайта, чтобы к нему можно было получить доступ через внешнюю сеть.
internet
|
[ Ingress ]
--|-----|--
[ Services ]
в,Ingress
Содержит два компонента
-
Ingress
: настроить правила переадресации, аналогичные конфигурационному файлу nginx. -
Ingress Controller
: вперед, аналогично nginx, будет читатьIngress
правила и превратиться вnginx
файл конфигурации
иIngress Controller
Кромеnginx
в дополнении кhaproxy
,ingress
ждите, мы выбираемnginx
в качестве Ingress-контроллера
Разверните nginx Ingress Controller с помощью helm
Используем helm для выбора официальногоstable/nginx-ingressграфик для развертывания.
nginx-ingress
Настроит тип какLoadBalancer
сервис,Так что надо настроитьEXTERNAL-IP
Это IP-адрес узла кластера k8s.Здесь external-ip будет установлен на[172.17.68.39, 172.17.68.40]
мы можем пройтиkubectl get nodes
чтобы получить IP-адрес
# 获取node的 INTERNAL-IP,作为 LoadBalancer 的 EXTERNAL-IP
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
shanyue Ready master 13d v1.16.0 172.17.68.39 <none> CentOS Linux 7 (Core) 3.10.0-957.21.3.el7.x86_64 docker://18.6.2
shuifeng Ready <none> 13d v1.16.0 172.17.68.40 <none> CentOS Linux 7 (Core) 3.10.0-957.21.3.el7.x86_64 docker://18.6.2
Здесь external-ip будет установлен на[172.17.68.39, 172.17.68.40]
controller.service.externalIPs[0]=172.17.68.39
controller.service.externalIPs[1]=172.17.68.40
# 使用 helm v3 部署,如果使用 helm v2 部署的话,把 release-name 使用 --name 指定
$ helm install nginx-ingress stable/nginx-ingress --set "controller.service.externalIPs[0]=172.17.68.39,controller.service.externalIPs[1]=172.17.68.40"
NAME: nginx-ingress
LAST DEPLOYED: 2019-10-18 21:21:44.115902395 +0800 CST m=+1.904554085
NAMESPACE: default
STATUS: deployed
NOTES:
The nginx-ingress controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w nginx-ingress-controller'
An example Ingress that makes use of the controller:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: example
namespace: foo
spec:
rules:
- host: www.example.com
http:
paths:
- backend:
serviceName: exampleService
servicePort: 80
path: /
# This section is only required if TLS is to be enabled for the Ingress
tls:
- hosts:
- www.example.com
secretName: example-tls
If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:
apiVersion: v1
kind: Secret
metadata:
name: example-tls
namespace: foo
data:
tls.crt: <base64 encoded cert>
tls.key: <base64 encoded key>
type: kubernetes.io/tls
Проверить развертывание nginx-ingress
$ helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART
nginx-ingress default 1 2019-10-18 11:21:44.115902395 +0800 CST deployed nginx-ingress-1.24.0
# 查看 nginx-ingress 所有的 service
$ kubectl get svc -l app=nginx-ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress-controller LoadBalancer 10.101.64.64 172.17.68.39,172.17.68.40 80:30285/TCP,443:31094/TCP 7m19s
nginx-ingress-default-backend ClusterIP 10.110.76.15 <none> 80/TCP 7m19s
Настройте Ingress для сопоставления доменных имен
Связь с известными знаниями помогает нам лучше усваивать новые знания. Ниже приведен простой файл конфигурации для развертывания приложения блога с помощью nginx и ingress.
- Доступ к приложению из внешней сети осуществляется через доменное имя nginx.xiange.tech.
- Прокси-сервис nginx для балансировки нагрузки
- nginx открывает порт 80
server {
listen 80
server_name nginx.xiange.tech
location / {
proxy_pass: http://nginx:80
}
}
использоватьIngress
Настройте правила маршрутизации следующим образом
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: nginx-service-ingress
spec:
rules:
- host: nginx.xiange.tech
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
path: /
Мы используемIngress
настроить его наnginx.xiange.tech
Под этим доменным именем откройте доменное имя в браузере в общедоступной сетевой среде.nginx.xiange.tech
, вы можете увидеть знакомую страницу конфигурации nginx
резюме
Развернуть приложение изDeployment
,Service
сноваIngress
Полный файл конфигурации выглядит следующим образом
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: nginx-service-ingress
spec:
rules:
- host: nginx.xiange.tech
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
path: /
Подписывайтесь на меня
Добро пожаловать в публичный аккаунтГорная Луна Путешествие, я буду регулярно делиться некоторыми статьями о внешнем и внутреннем интерфейсе, эксплуатации и обслуживании, а также будет ежедневный обзор и сводка технологий и жизни, добро пожаловать, чтобы обратить внимание на обмен