{"id":40453,"date":"2023-02-06T11:35:37","date_gmt":"2024-02-26T19:34:37","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/"},"modified":"2024-04-29T13:22:09","modified_gmt":"2024-04-29T05:22:09","slug":"kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/","title":{"rendered":"Kubernetes\u73af\u5883\u4e2d\u7684Spring Boot WEB\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e"},"content":{"rendered":"<h1>Spring Boot WEB\u670d\u52a1\u5728Kubernetes\u73af\u5883\u4e2d\u7684\u53cd\u5411\u4ee3\u7406\u914d\u7f6e<\/h1>\n<h2>\u8bf7\u6c49\u8bed\u6bcd\u8bed\u5316\u4e3a\u4ee5\u4e0b\u5185\u5bb9\u63d0\u4f9b\u4e00\u79cd\u8868\u8fbe\u65b9\u5f0f\uff1a<\/h2>\n<p>\u76ee\u6807<\/p>\n<p>\u5728 Kubernetes \u73af\u5883\u4e2d\u542f\u52a8\u7684 Spring Boot WEB \u670d\u52a1\u4e2d\u914d\u7f6e\u53cd\u5411\u4ee3\u7406\u4ee5\u52a0\u6df1\u7406\u89e3\u3002<\/p>\n<h2>\u5b9e\u73b0<\/h2>\n<p>\u5728\u672c\u5730\uff08Ubuntu\uff09\u7684 Kubernetes \u73af\u5883\uff08Docker Desktop\uff09\u4e2d\u90e8\u7f72\u548c\u542f\u52a8 Nginx \u548c Spring Boot WEB \u5e94\u7528\u7684 Docker \u955c\u50cf\u3002<\/p>\n<h2>\u7814\u53d1\u73af\u5883<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Windows 11 Home 22H2 \u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>WSL \u306e Ubuntu \u3092\u64cd\u4f5c\u3057\u3066\u3044\u304d\u307e\u3059\u306e\u3067 macOS \u306e\u65b9\u3082\u53c2\u8003\u306b\u3057\u3066\u9802\u3051\u307e\u3059\u3002<\/p>\n<details>WSL\uff08Microsoft Store\u5e94\u7528\u7248\uff09<br \/>\n&gt; wsl &#8211;version<br \/>\nWSL\u7248\u672c\uff1a1.0.3.0<br \/>\n\u5185\u6838\u7248\u672c\uff1a5.15.79.1<br \/>\nWSLg\u7248\u672c\uff1a1.0.47Ubuntu<br \/>\n$ lsb_release -a<br \/>\n\u6ca1\u6709\u53ef\u7528\u7684LSB\u6a21\u5757\u3002<br \/>\n\u53d1\u884c\u5546ID\uff1aUbuntu<br \/>\n\u63cf\u8ff0\uff1aUbuntu 22.04.1 LTS<br \/>\n\u7248\u672c\uff1a22.04<\/p>\n<p>Java JDK \u203b \u6700\u5c0f\u914d\u7f6eJava JDK\u5b89\u88c5\u548cHello World\uff01<br \/>\n$ java -version<br \/>\nopenjdk\u7248\u672c\u201c11.0.17\u201d 2022-10-18<br \/>\nOpenJDK\u8fd0\u884c\u65f6\u73af\u5883\uff08build 11.0.17+8-post-Ubuntu-1ubuntu222.04\uff09<br \/>\nOpenJDK 64\u4f4d\u670d\u52a1\u5668\u865a\u62df\u673a\uff08build 11.0.17+8-post-Ubuntu-1ubuntu222.04\uff0c\u6df7\u5408\u6a21\u5f0f\uff0c\u5171\u4eab\uff09<\/p>\n<p>Maven \u203b \u6700\u5c0f\u914d\u7f6eMaven\u5b89\u88c5\u548cHello World\uff01<br \/>\n$ mvn -version<br \/>\nApache Maven 3.6.3<br \/>\nMaven\u4e3b\u76ee\u5f55\uff1a\/usr\/share\/maven<br \/>\nJava\u7248\u672c\uff1a11.0.17\uff0c\u4f9b\u5e94\u5546\uff1aUbuntu\uff0c\u8fd0\u884c\u65f6\uff1a\/usr\/lib\/jvm\/java-11-openjdk-amd64<\/p>\n<p>Docker Desktop<br \/>\n\u7248\u672c4.16.3\uff0896739\uff09<\/p>\n<p>$ docker &#8211;version<br \/>\nDocker\u7248\u672c20.10.22\uff0c\u6784\u5efa3a2c30b<\/p>\n<p>$ docker-compose &#8211;version<br \/>\nDocker Compose\u7248\u672cv2.15.1<\/p>\n<p>$ kubectl version &#8211;short<br \/>\n\u5ba2\u6237\u7aef\u7248\u672c\uff1av1.25.4<br \/>\nKustomize\u7248\u672c\uff1av4.5.7<br \/>\n\u670d\u52a1\u5668\u7248\u672c\uff1av1.25.4<\/p>\n<\/details>\n<p>\u203b \u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u4e86\u5728 Ubuntu \u7ec8\u7aef\u4e2d\u8fdb\u884c\u64cd\u4f5c\u7684\u57fa\u672c\u65b9\u6cd5\u3002<\/p>\n<h2>\u663e\u793a &#8220;Hello World&#8221; \u7684\u6b65\u9aa4<\/h2>\n<h3>\u521b\u5efaSpring Boot WEB\u670d\u52a1<\/h3>\n<p>\u8bf7\u53c2\u8003\u6700\u7b80\u5355\u7684Spring Boot WEB\u670d\u52a1\u7684Hello World\uff01<\/p>\n<p>\u8f6c\u5230\u9879\u76ee\u6587\u4ef6\u5939<br \/>\n\u203b \u6211\u4eec\u5c06 ~\/tmp\/hello-spring-boot \u89c6\u4e3a\u9879\u76ee\u6587\u4ef6\u5939\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">cd<\/span> ~\/tmp\/hello-spring-boot\r\n<\/code><\/pre>\n<h3>\u521b\u5efaDocker\u955c\u50cf<\/h3>\n<p>\u8bf7\u53c2\u8003\u5728Docker\u73af\u5883\u4e0b\u542f\u52a8Spring Boot WEB\u670d\u52a1\u3002<\/p>\n<h3>\u51c6\u5907 Kubernetes \u73af\u5883<\/h3>\n<h4>Docker\u684c\u9762\u7248<\/h4>\n<p>[\u8bbe\u7f6e] \u2192 [Kubernetes]<\/p>\n<p>Enable Kubernetes<\/p>\n<h3>\u4fee\u6539Kubernetes\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>vim kube-all-in-one.yaml\r\n<\/code><\/pre>\n<p>\u6587\u4ef6\u7684\u5185\u5bb9<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Service<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">app-service<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">app<\/span>\r\n  <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">http<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">8080<\/span>\r\n    <span class=\"na\">targetPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">8080<\/span>\r\n<span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">apps\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Deployment<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">app-deployment<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">replicas<\/span><span class=\"pi\">:<\/span> <span class=\"m\">1<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">app<\/span>\r\n  <span class=\"na\">template<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">app<\/span>\r\n    <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">containers<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">app<\/span>\r\n        <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">app-hello-spring-boot<\/span>\r\n        <span class=\"na\">imagePullPolicy<\/span><span class=\"pi\">:<\/span> <span class=\"s\">IfNotPresent<\/span>\r\n        <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">8080<\/span>\r\n<span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Service<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web-service<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"pi\">:<\/span> <span class=\"s\">NodePort<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web<\/span>\r\n  <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">http<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">80<\/span>\r\n    <span class=\"na\">targetPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">80<\/span>\r\n    <span class=\"na\">nodePort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">30000<\/span>\r\n<span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">apps\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Deployment<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web-deployment<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">replicas<\/span><span class=\"pi\">:<\/span> <span class=\"m\">1<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web<\/span>\r\n  <span class=\"na\">template<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web<\/span>\r\n    <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">containers<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web<\/span>\r\n        <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nginx:latest<\/span>\r\n        <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">80<\/span>\r\n        <span class=\"na\">volumeMounts<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web-config<\/span>\r\n          <span class=\"na\">mountPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/etc\/nginx\/nginx.conf<\/span>\r\n          <span class=\"na\">subPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nginx.conf<\/span>\r\n      <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web-config<\/span>\r\n        <span class=\"na\">configMap<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web-config<\/span>\r\n<span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ConfigMap<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web-config<\/span>\r\n<span class=\"na\">data<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">nginx.conf<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|<\/span>\r\n    <span class=\"s\">events {<\/span>\r\n    <span class=\"s\">}<\/span>\r\n\r\n    <span class=\"s\">http {<\/span>\r\n      <span class=\"s\">server {<\/span>\r\n        <span class=\"s\">listen 80;<\/span>\r\n        <span class=\"s\">location \/ {<\/span>\r\n          <span class=\"s\">proxy_pass http:\/\/app-service:8080;<\/span>\r\n          <span class=\"s\">proxy_set_header Host $host;<\/span>\r\n          <span class=\"s\">proxy_set_header X-Real-IP $remote_addr;<\/span>\r\n        <span class=\"s\">}<\/span>\r\n      <span class=\"s\">}<\/span>\r\n    <span class=\"s\">}<\/span>\r\n<\/code><\/pre>\n<h3>\u76ee\u5f55\u6587\u4ef6\u7ed3\u6784<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>tree <span class=\"nt\">-I<\/span> <span class=\"nb\">test<\/span> <span class=\"nt\">-I<\/span> target\r\n<span class=\"nb\">.<\/span>\r\n\u251c\u2500\u2500 Dockerfile\r\n\u251c\u2500\u2500 HELP.md\r\n\u251c\u2500\u2500 docker-compose.yml\r\n\u251c\u2500\u2500 kube-all-in-one.yaml\r\n\u251c\u2500\u2500 mvnw\r\n\u251c\u2500\u2500 mvnw.cmd\r\n\u251c\u2500\u2500 nginx.conf\r\n\u251c\u2500\u2500 pom.xml\r\n\u2514\u2500\u2500 src\r\n    \u2514\u2500\u2500 main\r\n        \u251c\u2500\u2500 java\r\n        \u2502\u00a0\u00a0 \u2514\u2500\u2500 com\r\n        \u2502\u00a0\u00a0     \u2514\u2500\u2500 example\r\n        \u2502\u00a0\u00a0         \u2514\u2500\u2500 springboot\r\n        \u2502\u00a0\u00a0             \u251c\u2500\u2500 SpringbootApplication.java\r\n        \u2502\u00a0\u00a0             \u2514\u2500\u2500 controller\r\n        \u2502\u00a0\u00a0                 \u2514\u2500\u2500 DataController.java\r\n        \u2514\u2500\u2500 resources\r\n            \u251c\u2500\u2500 application.properties\r\n            \u251c\u2500\u2500 static\r\n            \u2514\u2500\u2500 templates\r\n<\/code><\/pre>\n<h3>Kubernetes\u73af\u5883<\/h3>\n<p>\u786e\u8ba4\u8fde\u63a5\u76ee\u6807<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>kubectl config current-context\r\ndocker-desktop\r\n<\/code><\/pre>\n<p>\u5982\u679c\u8981\u5c06\u8fde\u63a5\u76ee\u6807\u8fd4\u56de\u5230\u672c\u5730\uff08docker-desktop\uff09\u7684\u60c5\u51b5\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>kubectl config use-context docker-desktop\r\n<\/code><\/pre>\n<p>\u90e8\u7f72<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>kubectl apply <span class=\"nt\">-f<\/span> kube-all-in-one.yaml\r\nservice\/app-service created\r\ndeployment.apps\/app-deployment created\r\nservice\/web-service created\r\ndeployment.apps\/web-deployment created\r\nconfigmap\/web-config created\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u72b6\u6001<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>kubectl get pods,services,deployments\r\nNAME                                  READY   STATUS    RESTARTS   AGE\r\npod\/app-deployment-cdc7dcbf9-2f9wm    1\/1     Running   0          19s\r\npod\/web-deployment-86b95b4b97-4mdc5   1\/1     Running   0          19s\r\n\r\nNAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT<span class=\"o\">(<\/span>S<span class=\"o\">)<\/span>        AGE\r\nservice\/app-service   ClusterIP   10.96.102.36     &lt;none&gt;        8080\/TCP       19s\r\nservice\/kubernetes    ClusterIP   10.96.0.1        &lt;none&gt;        443\/TCP        3m16s\r\nservice\/web-service   NodePort    10.102.128.228   &lt;none&gt;        80:30000\/TCP   19s\r\n\r\nNAME                             READY   UP-TO-DATE   AVAILABLE   AGE\r\ndeployment.apps\/app-deployment   1\/1     1            1           19s\r\ndeployment.apps\/web-deployment   1\/1     1            1           19s\r\n<\/code><\/pre>\n<p>\u5f53\u68c0\u67e5Docker Desktop\u65f6\uff0c\u5b83\u4ee5\u5bb9\u5668\u7684\u5f62\u5f0f\u542f\u52a8\u3002<\/p>\n<p>\u5728\u4e00\u4e2a\u7f51\u7edc\u6d4f\u89c8\u5668\u4e2d\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code>http:\/\/localhost:30000\/api\/data\r\n<\/code><\/pre>\n<p>\u5728\u7f51\u9875\u6d4f\u89c8\u5668\u4e2d\u663e\u793a {&#8220;message&#8221;:&#8221;\u4f60\u597d\u4e16\u754c!&#8221;} \uff0c\u5e76\u6210\u529f\u83b7\u53d6\u5230 JSON \u6570\u636e\u3002<\/p>\n<p>\u53ef\u4ee5\u901a\u8fc7\u53e6\u4e00\u4e2a\u7ec8\u7aef\u547d\u4ee4\u786e\u8ba4<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>curl <span class=\"nt\">-X<\/span> GET http:\/\/localhost:30000\/api\/data\r\n<span class=\"o\">{<\/span><span class=\"s2\">\"message\"<\/span>:<span class=\"s2\">\"Hello World!\"<\/span><span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h3>\u786e\u8ba4\u53cd\u5411\u4ee3\u7406\u7684\u8fd0\u4f5c\u3002<\/h3>\n<p>\u786e\u8ba4Nginx POD\u7684\u65e5\u5fd7\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>kubectl get pods | <span class=\"nb\">grep <\/span>web\r\n<span class=\"nv\">$ <\/span>kubectl logs web-deployment-86b95b4b97-rghsn\r\n192.168.65.4 - - <span class=\"o\">[<\/span>16\/Feb\/2023:09:10:06 +0000] <span class=\"s2\">\"GET \/api\/data HTTP\/1.1\"<\/span> 200 37 <span class=\"s2\">\"-\"<\/span> <span class=\"s2\">\"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/110.0.0.0 Safari\/537.36\"<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u6b63\u5728\u901a\u8fc7Nginx\u8bbf\u95eeSpring Boot WEB\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n<h2>\u603b\u7ed3<\/h2>\n<ul class=\"post-ul\">Ubuntu \u306e \u6700\u5c0f\u69cb\u6210\u306e Java \u958b\u767a\u74b0\u5883\u3067 Spring Boot WEB\u30b5\u30fc\u30d3\u30b9\u3068\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u3092 Kubernetes \u74b0\u5883\u306b\u3066\u30b3\u30f3\u30c6\u30ca\u3068\u3057\u3066\u8d77\u52d5\u3055\u305b\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3057\u305f\u3002<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Spring Boot WEB\u670d\u52a1\u5728Kubernetes\u73af\u5883\u4e2d\u7684\u53cd\u5411\u4ee3\u7406\u914d\u7f6e \u8bf7\u6c49\u8bed\u6bcd\u8bed\u5316\u4e3a\u4ee5\u4e0b\u5185\u5bb9\u63d0\u4f9b\u4e00\u79cd\u8868 [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-40453","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kubernetes\u73af\u5883\u4e2d\u7684Spring Boot WEB\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes\u73af\u5883\u4e2d\u7684spring-boot-web\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes\u73af\u5883\u4e2d\u7684Spring Boot WEB\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e\" \/>\n<meta property=\"og:description\" content=\"Spring Boot WEB\u670d\u52a1\u5728Kubernetes\u73af\u5883\u4e2d\u7684\u53cd\u5411\u4ee3\u7406\u914d\u7f6e \u8bf7\u6c49\u8bed\u6bcd\u8bed\u5316\u4e3a\u4ee5\u4e0b\u5185\u5bb9\u63d0\u4f9b\u4e00\u79cd\u8868 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes\u73af\u5883\u4e2d\u7684spring-boot-web\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-26T19:34:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T05:22:09+00:00\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/\",\"name\":\"Kubernetes\u73af\u5883\u4e2d\u7684Spring Boot WEB\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2024-02-26T19:34:37+00:00\",\"dateModified\":\"2024-04-29T05:22:09+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes\u73af\u5883\u4e2d\u7684Spring Boot WEB\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kubernetes\u73af\u5883\u4e2d\u7684Spring Boot WEB\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes\u73af\u5883\u4e2d\u7684spring-boot-web\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"Kubernetes\u73af\u5883\u4e2d\u7684Spring Boot WEB\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e","og_description":"Spring Boot WEB\u670d\u52a1\u5728Kubernetes\u73af\u5883\u4e2d\u7684\u53cd\u5411\u4ee3\u7406\u914d\u7f6e \u8bf7\u6c49\u8bed\u6bcd\u8bed\u5316\u4e3a\u4ee5\u4e0b\u5185\u5bb9\u63d0\u4f9b\u4e00\u79cd\u8868 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes\u73af\u5883\u4e2d\u7684spring-boot-web\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2024-02-26T19:34:37+00:00","article_modified_time":"2024-04-29T05:22:09+00:00","author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"2 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/","name":"Kubernetes\u73af\u5883\u4e2d\u7684Spring Boot WEB\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2024-02-26T19:34:37+00:00","dateModified":"2024-04-29T05:22:09+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"Kubernetes\u73af\u5883\u4e2d\u7684Spring Boot WEB\u670d\u52a1\u53cd\u5411\u4ee3\u7406\u914d\u7f6e"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/kubernetes%e7%8e%af%e5%a2%83%e4%b8%ad%e7%9a%84spring-boot-web%e6%9c%8d%e5%8a%a1%e5%8f%8d%e5%90%91%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=40453"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40453\/revisions"}],"predecessor-version":[{"id":85522,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40453\/revisions\/85522"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=40453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=40453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=40453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}