我正在学习 Kubernetes,并且在理解名称/标签/选择器的使用以及 pod 名称和容器名称是否应该对齐时遇到了很大的麻烦。
我有一个 .NET Core MVC 应用程序、一个 PostgreSQL 数据库和一个 Nginx 反向代理的设置。
它与这个 docker-compose.yml 配合得很好:
version: "3.7"
services:
reverseproxy:
build:
context: ./Nginx
dockerfile: ../Nginx.dockerfile
ports:
- "80:80"
- "443:443"
restart: always
db:
image: postgres:12.1-alpine
environment:
POSTGRES_PASSWORD: "mvcdbsecretpassword"
mvc:
depends_on:
- reverseproxy
- db
build:
context: .
dockerfile: ./MyMvc.dockerfile
environment:
ConnectionStrings.MyMvc: "Host=db;Port=5432;Database=MyMvcDb;Username=postgres;Password=mvcdbsecretpassword"
expose:
- "5000"
restart: always
MVC 应用程序容器已构建并标记并推送到我的 Docker 中心注册表。在启动时,它记录连接字符串并接受来自 docker-compose 文件的设置(显然 - 毕竟它正在工作)。
我已将其转换为六个 kubernetes yaml 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
labels:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:12.1-alpine
env:
- name: POSTGRES_PASSWORD
value: mvcdbsecretpassword
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
ports:
- name: "postgres"
port: 5432
targetPort: 5432
selector:
app: postgres
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mvc
labels:
name: mymvc
spec:
replicas: 1
selector:
matchLabels:
app: mymvc
template:
metadata:
labels:
app: mymvc
spec:
containers:
- name: mvc
image: mymvc:v2
env:
- name: ConnectionStrings.MyMvc
value: "Host=postgres;Port=5432;Database=MyMvcDb;Username=postgres;Password=mvcdbsecretpassword"
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: mvc
labels:
app: mymvc
spec:
ports:
- name: "mvc"
port: 5000
targetPort: 5000
selector:
app: mymvc
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: reverseproxy-deployment
labels:
app: mymvc
spec:
replicas: 1
selector:
matchLabels:
app: mymvc
template:
metadata:
labels:
app: mymvc
spec:
containers:
- name: reverseproxy
image: reverseproxy:v2
ports:
- containerPort: 80
- containerPort: 443
---
apiVersion: v1
kind: Service
metadata:
name: reverseproxy-service
labels:
app: mymvc
spec:
ports:
- name: "http"
port: 80
targetPort: 80
- name: "https"
port: 443
targetPort: 443
selector:
app: mymvc
type: LoadBalancer
如前所述,我对何时使用名称以及何时使用标签感到非常困惑。
一些指导将不胜感激。
编辑:David Maze 帮助我理解了名称、标签和选择器之间的关系。YAML 文件会相应地更新。
我还为暴露端口 5000 的 mvc 应用程序添加了一个服务。
现在 Pod 不再崩溃,但我仍然无法访问 MVC 应用程序。
我想,我应该提一下,我正试图让它在 Windows 10 机器上的 Docker 桌面上运行。
反向代理在 Compose 堆栈中有意义,但我不再确定它在 Kubernetes 集群中是否也有意义,或者我是否应该设置某种 Ingress 控制器。
有人能告诉我,是否有可能在 Docker 桌面上测试这个设置?
运行kubectl get nodes -o wide
显示没有外部IP,但我也不确定集群是否镜像到本地主机。
我需要了解的是需要一个 Ingress 控制器和一个 Ingress.yaml。
所有云托管提供商都提供自己的 Ingress Controller,但在 Docker Desktop 上进行测试,您必须自己安装一个。
为 Docker 桌面安装 Nginx-Ingress 的命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.26.2/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.26.2/deploy/static/provider/
我的示例 Ingress.yaml:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: mvc-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "false"
spec:
tls:
- hosts:
- mymvc.local
secretName: mvcsecret-tls
rules:
- host: mymvc.local
http:
paths:
- path: /
backend:
serviceName: mvc
servicePort: 5000
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句