最近,我试图做一个测试部署的Blazor服务器应用程序在本地托管的库伯内特斯实例运行在docker桌面。
我设法在容器中正确启动了应用程序,应用了迁移等,日志告诉我应用程序正在运行并等待。
使用Docker桌面中的< code > Reset Kubernetes k luster 重置Kubernetes后采取的步骤:
>
修改<code>hosts</code>文件以包含<code>127.0.0.1 scp.com</code>
向 mssql 添加了包含密钥的机密
使用 kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml
安装 Ngnix 控制器
应用的本地卷声明 - local-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mssql-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 250Mi
应用了mssql实例和集群ip-mssql scanapp depl.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mssql-depl
spec:
replicas: 1
selector:
matchLabels:
app: mssql
template:
metadata:
labels:
app: mssql
spec:
containers:
- name: mssql
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- containerPort: 1433
env:
- name: MSSQL_PID
value: "Express"
- name: ACCEPT_EULA
value: "Y"
- name: SA_PASSWORD
valueFrom:
secretKeyRef:
name: mssql
key: SA_PASSWORD
volumeMounts:
- mountPath: /var/opt/mssql/data
name: mssqldb
volumes:
- name: mssqldb
persistentVolumeClaim:
claimName: mssql-claim
---
apiVersion: v1
kind: Service
metadata:
name: mssql-clusterip-srv
spec:
type: ClusterIP
selector:
app: mssql
ports:
- name: mssql
protocol: TCP
port: 1433
targetPort: 1433
---
apiVersion: v1
kind: Service
metadata:
name: mssql-loadbalancer
spec:
type: LoadBalancer
selector:
app: mssql
ports:
- protocol: TCP
port: 1433
targetPort: 1433
应用Blazor应用程序和集群ip-scanapp-depl.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: scanapp-depl
spec:
replicas: 1
selector:
matchLabels:
app: scanapp
template:
metadata:
labels:
app: scanapp
spec:
containers:
- name: scanapp
image: scanapp:1.0
---
apiVersion: v1
kind: Service
metadata:
name: scanapp-clusterip-srv
spec:
type: ClusterIP
selector:
app: scanapp
ports:
- name: ui
protocol: TCP
port: 8080
targetPort: 80
- name: ui2
protocol: TCP
port: 8081
targetPort: 443
- name: scanapp0
protocol: TCP
port: 5000
targetPort: 5000
- name: scanapp1
protocol: TCP
port: 5001
targetPort: 5001
- name: scanapp5
protocol: TCP
port: 5005
targetPort: 5005
应用的Ingress-< code > Ingress-SRV . YAML :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-srv
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "affinity"
nginx.ingress.kubernetes.io/session-cookie-expires: "14400"
nginx.ingress.kubernetes.io/session-cookie-max-age: "14400"
spec:
ingressClassName: nginx
rules:
- host: scp.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: scanapp-clusterip-srv
port:
number: 8080
所有这些之后,Blazor应用程序开始运行良好,连接到mssql实例,种子数据库并等待客户端。日志如下:
[15:18:53 INF]正在启动…
[15:18:53WRN]将密钥存储在目录'/root/中。“aspnet/DataProtection Keys”,可能无法在容器外部持久化。当容器被销毁时,受保护的数据将不可用
[15:18:55 INF]AuthorizationPolicy Configuration started…
[15:18:55 INF]Policy'LocationMustBeSady'已成功配置。[15:18:55 INF]授权策略配置完成。[15:18:55 INF]现在正在收听:http://[::]:80[15:18:55INF]应用程序已启动。按Ctrl C关闭。[15:18:55 INF]托管环境:docker[15:18:55INF]内容根路径:/app
此外,< code>kubectl get ingress现在不像以前那样显示地址值,并且< code>kubectl get services现在在本文末尾显示< code>mssql-loadbalancer和< code > ingress-nginx-controller EXTERNAL-IP-detailed日志待定
似乎没有任何效果,所以我的配置文件一定有问题,我不知道会是什么。另请注意,这次没有配置 NodePort
。
此外,Dockerfile for Blazor 应用:
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source
EXPOSE 5000
EXPOSE 5001
EXPOSE 5005
EXPOSE 80
EXPOSE 443
LABEL name="ScanApp"
# copy csproj and restore as distinct layers
COPY ScanApp/*.csproj ScanApp/
COPY ScanApp.Application/*.csproj ScanApp.Application/
COPY ScanApp.Common/*.csproj ScanApp.Common/
COPY ScanApp.Domain/*.csproj ScanApp.Domain/
COPY ScanApp.Infrastructure/*.csproj ScanApp.Infrastructure/
COPY ScanApp.Tests/*.csproj ScanApp.Tests/
Run ln -sf /usr/share/zoneinfo/posix/Europe/Warsaw /etc/localtime
RUN dotnet restore ScanApp/ScanApp.csproj
# copy and build app and libraries
COPY ScanApp/ ScanApp/
COPY ScanApp.Application/ ScanApp.Application/
COPY ScanApp.Common/ ScanApp.Common/
COPY ScanApp.Domain/ ScanApp.Domain/
COPY ScanApp.Infrastructure/ ScanApp.Infrastructure/
COPY ScanApp.Tests/ ScanApp.Tests/
WORKDIR /source/ScanApp
RUN dotnet build -c release --no-restore
# test stage -- exposes optional entrypoint
# target entrypoint with: docker build --target test
FROM build AS test
WORKDIR /source/ScanApp.Tests
COPY tests/ .
ENTRYPOINT ["dotnet", "test", "--logger:trx"]
FROM build AS publish
RUN dotnet publish -c release --no-build -o /app
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=publish /app .
ENV ASPNETCORE_ENVIRONMENT="docker"
ENTRYPOINT ["dotnet", "ScanApp.dll"]
kubectl获取入口
输出:
kubectl get pods --all-namespaces
output:
kubectl获取部署--所有命名空间
输出
kubectl获取服务--all-namesspace
输出:
NGINX入口控制器
版本:v1.1.0
构建: cacbee86b6ccc45bde8ffc184521bed3022e7dee
存储库:https://github.com/kubernetes/ingress-nginx
ngin x版本:ngin x/1.19.9
W1129 15:00:51.705331 8 client_config.go:615] 既没有指定 --kubeconfig 也没有指定 --master。使用 inClusterConfig。这可能行不通。
I1129 15:00:51.705452 8main.go:223]"创建API客户端"host="https://10.96.0.1:443"
I1129 15:00:51.721575 8主。go:267]“在Kubernetes集群中运行”major=“1”minor=“21”git=“v121.5”state=“clean”commit=“aea7bbadd2fc0d689de94a54e5b7b758869d691”platform=“linux/amd64”
I 1129 15:00:51.872964 8 main . go:104]" SSL假证书已创建" file = "/etc/ingress-controller/SSL/default-fake-certificate . PEM "
I1129 15:00:51.890273 8ssl.go:531]"加载tls证书"路径="/usr/本地/证书/证书"key="/usr/本地/证书/密钥"
I1129 15:00:51.910104 8发动机。go:255]“启动NGINX入口控制器”
I1129 15:00:51.920821 8 event.go:282] 事件(v1.ObjectReference{Kind:“ConfigMap”, Namespace:“ingress-nginx”, Name:“ingress-nginx-controller”, UID:“51060a85-d3a0-40de-b549-cf59e8fa7b08”, APIVersion:“v1”, ResourceVersion:“733”, FieldPath:“”}): type: 'Normal' 原因: 'CREATE' ConfigMap ingress-nginx/ingress-nginx-controller
I 1129 15:00:53.112043 8 nginx . go:297]"正在启动NGINX进程"
I1129 15:00:53.112213 8领导人选举。go:248]试图获取leader租约ingress nginx/ingress控制器leader。。。
I 1129 15:00:53.112275 8 nginx . go:317]"开始验证web hook " address = ":8443 " cert path = "/usr/local/certificates/cert " key path = "/usr/local/certificates/key "
I 1129 15:00:53.112468 8 controller . go:155]"检测到配置更改,需要后端重新加载"
I1129 15:00:53.118295 8领导人选举。go:258]成功获得租赁ingress nginx/ingress控制器领导者
I1129 15:00:53.119467 8状态。go:84]“新领导人当选”identity=“ingress-nginx-controller-54bfb9bb-f6gsf”
I1129 15:00:53.141609 8controller.go:172]"后端重新加载成功"
I1129 15:00:53.141804 8控制器。go:183]“初始同步,Hibernate1秒”
I1129 15:00:53.141908 8 event.go:282] 事件(v1.ObjectReference{Kind:“Pod”, Namespace:“ingress-nginx”, Name:“ingress-nginx-controller-54bfb9bb-f6gsf”, UID:“54e0c0c6-40ea-439e-b1a2-7787f1b37e7a”, APIVersion:“v1”, ResourceVersion:“766”, FieldPath:“}): 类型:”正常“原因:”重新加载“ 由于配置更改而触发的 NGINX 重新加载
I1129 15:04:25.107359 8admission.go:149]通过准入控制器处理的入口{testedIngres长度: 1 testedIngresTime: 0.022s renderingIngresL的长度: 1 renderingIngresTime: 0受理时间: 17.9kBs testedConfiguration大小: 0.022}
I1129 15:04:25.107395 8main.go:101]"成功验证配置,接受"ingress-srv/默认"
I 1129 15:04:25.110109 8 store . go:424]"找到有效的Ingres class " ingress = " default/ingress-SRV " Ingres class = " nginx "
I1129 15:04:25.110698 8 controller.go:155] “检测到配置更改,需要重新加载后端”
I1129 15:04:25.111057 8 event.go:282] 事件(v1.ObjectReference{Kind:“Ingress”, Namespace:“default”, Name:“ingress-srv”, UID:“6c15d014-ac14-404e-8b5e-d8526736c52a”, APIVersion:“networking.k8s.io/v1”, ResourceVersion:“1198”, FieldPath:“}): 类型:”正常“ 原因:”同步“ 计划同步
I1129 15:04:25.143417 8控制器。go:172]“后端已成功重新加载”
I1129 15:04:25.43767 8事件。go:282]事件(v1.ObjectReference{Kind:“Pod”,命名空间:“ingress nginx”,名称:“ingress-nginx-controller-54bfb9bb-f6gsf”,UID:“54e0c0c6-40ea-439e-b1a2-7787f1b37e7a”,APIVersion:“v1”,ResourceVersion:“766”,FieldPath:“”}):类型:“正常”原因:由于配置更改而触发“RELOAD”nginx重新加载
I1129 15:06:11.447313 8admission.go:149]通过准入控制器处理的入口{testedIngres长度: 1 testedIngresTime: 0.02s renderingIngresL的长度: 1 renderingIngresTime: 0受理时间: 17.9kBs testedConfiguration大小: 0.02}
I1129 15:06:11.447349 8 main.go:101] “已成功验证配置,正在接受” 入口=“入口-SRV/默认值”
I1129 15:06:11.449266 8 event.go:282] 事件(v1.ObjectReference{Kind:“Ingress”, Namespace:“default”, Name:“ingress-srv”, UID:“6c15d014-ac14-404e-8b5e-d8526736c52a”, APIVersion:“networking.k8s.io/v1”, ResourceVersion:“1347”, FieldPath:“}): 类型:”正常“ 原因:”同步“ 计划同步
I1129 15:06:11.449669 8 controller.go:155] “检测到配置更改,需要重新加载后端”
I1129 15:06:11.499772 8控制器。go:172]“后端已成功重新加载”
i1 129 15:06:11.500210 8 Event . go:282]事件(v1。ObjectReference{Kind:"Pod ",命名空间:" ingress-nginx ",名称:" ingress-nginx-controller-54 bfb 9 bb-f 6 gsf ",UID:" 54 E0 c0c 6-40ea-439 e-B1 a2-7787 f1 b 37 e 7 a ",APIVersion:"v1 ",ResourceVersion:"766 ",FieldPath:""}):类型:'正常'原因:' RELOAD '由于配置更改而触发了NGINX重新加载
首先,您不需要NodePort
服务,只需要ClusterIP
。如果您想直接访问服务而无需通过入口控制器,则使用Nodeport。
如果你想用<code>NodePort</code>测试这个,你需要定义一个,例如
- name: ui
port: 8080
targetPort: 80
nodePort: 38080 # needs to be higher than 30000
但是看看你的入口规则,它似乎有点不对劲。我会尝试以下操作:
spec:
rules:
- host: scp.com
http:
paths:
- path: /
backend:
serviceName: scanapp-clusterip-srv
servicePort: ui
将重新编辑主要问题
离开帖子以供将来使用
我解决了这个问题,或者至少我认为是这样。< br >除了@moonkotte建议将< code > Ingres class name:nginx 添加到< code>ingress-srv.yaml之外,我还更改了入口端口配置,使其现在指向端口< code>80。
由于这些更改,现在使用< code>scp.com可以正确打开我的应用程序。此外,使用节点端口访问,我可以使用< code>localhost:30080访问我的应用程序,其中30080端口是自动设置的(我从< code>scanapp-np-srv.yaml中删除了< code >节点端口配置行)
为什么中的端口进入srv。如果
必须设置为80-我不知道,我不完全理解Kubernetes配置的内部工作原理-欢迎所有解释。clusterIp
配置状态将端口8080
设置为目标端口80
,则yaml
主要配置文件的当前状态:
入口srv.yaml
:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-srv
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "affinity"
nginx.ingress.kubernetes.io/session-cookie-expires: "14400"
nginx.ingress.kubernetes.io/session-cookie-max-age: "14400"
spec:
ingressClassName: nginx
rules:
- host: scp.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: scanapp-clusterip-srv
port:
number: 80
scanapp np srv.yaml
:
apiVersion: v1
kind: Service
metadata:
name: scanappnpservice-srv
spec:
type: NodePort
selector:
app: scanapp
ports:
- name: ui
port: 8080
targetPort: 80
- name: scanapp0
protocol: TCP
port: 5000
targetPort: 5000
- name: scanapp1
protocol: TCP
port: 5001
targetPort: 5001
- name: scanapp5
protocol: TCP
port: 5005
targetPort: 5005
< br > < br > < code > scanapp-depl . YAML :
apiVersion: apps/v1
kind: Deployment
metadata:
name: scanapp-depl
spec:
replicas: 1
selector:
matchLabels:
app: scanapp
template:
metadata:
labels:
app: scanapp
spec:
containers:
- name: scanapp
image: scanapp:1.0
---
apiVersion: v1
kind: Service
metadata:
name: scanapp-clusterip-srv
spec:
type: ClusterIP
selector:
app: scanapp
ports:
- name: ui
protocol: TCP
port: 8080
targetPort: 80
- name: ui2
protocol: TCP
port: 8081
targetPort: 443
- name: scanapp0
protocol: TCP
port: 5000
targetPort: 5000
- name: scanapp1
protocol: TCP
port: 5001
targetPort: 5001
- name: scanapp5
protocol: TCP
port: 5005
targetPort: 5005
其余文件保持不变。
我在服务器上运行应用程序时出错,它在本地正常工作,我只需输入Run(npm start)并在本地正常运行。但和我在服务器上做的一样,我得到了下面给出的错误。请有人帮帮我。 {“name”:“chakde11”,“version”:“1.0.0”,“private”:false,“homepage”:http://chakde11.com/“,”依赖项“{bootstrap:“4.1.1”,“cha
选中“启用JDBC驱动程序部署”和“在重新部署期间保留会话”
pom.xml我有这个用来部署 在设置中。tomcat服务器的xml我有这个 当我试图调用maven deploy时,出现了一个错误: 服务器正在运行。我试图在pom中更改tomcat插件。xml到tomcat7 maven插件,但我得到了相同的错误。据我所知,它正试图将war文件部署到http://localhost:8080/manager/ua/andrfas/SCPI/0.0.1/SCPI
我有一个使用Tomcat服务器部署的JSF应用程序,它在Tomcat 7中完美运行。但是现在我需要部署非常应用程序Weblogic我将其部署到weblogic,但是在显示主页后,我尝试打开的任何链接我都会在我的应用程序中显示错误页面。 我使用JPA作为我的持久性API来连接到数据库。 Weblogic堆栈跟踪 我无法理解我是weblogic的新手请帮忙
我试图将一个spring boot应用程序部署到EAP7服务器上。该应用程序作为使用spring Boot的嵌入式tomcat servlet的独立应用程序运行良好,但是当我试图将其作为WAR部署到EAP7时,我遇到了以下异常: 在将jar文件转换为WAR时,我已经按照spring-boot文档的建议进行了操作。 我删除了并用覆盖受保护的SpringApplicationBuilder配置(Spr
我试图在配置为eclipse的Jboss服务器中部署ear文件,但当我试图部署它时,它总是以超时异常结束。我试图增加我的服务器超时时间,但似乎没有帮助。但是同一个ear当我尝试在eclipse之外的同一台服务器上部署时,它被成功地部署,即使在通过google处理了几个相关问题之后,也无法找到根案例。 根据我的观察,这个问题似乎不是由于jboss配置造成的,因为当直接部署时,同一个ear和服务器似乎