在Kubernetes (K8S) 中发布应用并设置隐藏路径是一个常见的需求,这样可以让应用在不暴露真实路径的情况下也能够被访问到。在本文中,我将向你介绍如何实现“k8s 发布应用 隐藏路径”。

### 流程概述
首先让我们了解一下整个实现的流程,然后再详细介绍每一步应该如何实现。

| 步骤 | 内容 |
| -------- | --------------------- |
| 步骤一 | 创建 Deployment 对象 |
| 步骤二 | 创建 Service 对象,将 Deployment 暴露为 ClusterIP 或 NodePort 类型 |
| 步骤三 | 创建 Ingress 对象,设置隐藏路径 |
| 步骤四 | 测试访问应用 |

### 具体步骤

#### 步骤一:创建 Deployment 对象
首先需要在K8S集群中创建一个 Deployment 对象来运行你的应用。Deployment 对象是管理 Pod 的最常见的方式之一,它可以确保你的应用在集群中稳定运行。

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app-image:latest
ports:
- containerPort: 80
```

在这段代码中,我们创建了一个名为 `my-app` 的 Deployment 对象,它会运行一个名为 `my-app` 的容器,并监听80端口。

#### 步骤二:创建 Service 对象
接下来,我们需要创建一个 Service 对象来暴露 Deployment 中的 Pod 以便能够被访问到。你可以选择使用 ClusterIP 或 NodePort 类型的 Service。

ClusterIP 类型的 Service 只能在集群内部访问,而 NodePort 类型的 Service 可以通过节点的IP和端口暴露出来。

```yaml
apiVersion: v1
kind: Service
metadata:
name: my-app-svc
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort # 或者 ClusterIP
```

在这段代码中,我们创建了一个名为 `my-app-svc` 的 Service 对象,它会将来自80端口的流量转发给 Pod 中的容器。

#### 步骤三:创建 Ingress 对象
最后,我们需要创建一个 Ingress 对象来设置隐藏路径,以便能够通过这个路径访问到我们的应用。

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
spec:
rules:
- http:
paths:
- path: /hidden-path
pathType: Prefix
backend:
service:
name: my-app-svc
port:
number: 80
```

在这段代码中,我们创建了一个名为 `my-app-ingress` 的 Ingress 对象,它设置了一个隐藏路径 `/hidden-path` 并将流量转发给我们之前创建的 Service `my-app-svc`。

#### 步骤四:测试访问应用
最后,你可以通过浏览器或者 curl 等工具访问你的应用,访问路径为 `http://your-domain/hidden-path`,即可访问到你的应用。

通过以上步骤,你已经成功地实现了“k8s 发布应用 隐藏路径”的需求。希望这篇文章能帮助到你,如果有任何疑问或者问题,欢迎随时向我咨询。祝你在K8S的学习和工作中越来越顺利!