## K8S外部服务访问方法

### 概述
在Kubernetes中,外部服务访问方法可以帮助我们将集群中运行的应用程序暴露给外部流量。本文将介绍如何使用NodePort和LoadBalancer这两种方法来实现K8S外部服务访问。

### 流程概览
下面是使用NodePort和LoadBalancer方法实现K8S外部服务访问的流程:

| 步骤 | 描述 |
| :--: | :-- |
| 1 | 创建一个Deployment或者Pod |
| 2 | 创建一个Service并将其与Deployment或Pod关联 |
| 3 | 使用NodePort或LoadBalancer方式将Service暴露出去 |

### 具体步骤和代码示例

#### 步骤一:创建一个Deployment或者Pod

首先,我们需要在Kubernetes集群中创建一个Deployment或者Pod来运行我们的应用程序。下面是一个简单的Deployment示例:

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

#### 步骤二:创建一个Service并将其与Deployment或Pod关联

接下来,我们需要创建一个Service来暴露我们的Deployment或Pod。可以使用NodePort或LoadBalancer类型的Service。下面是一个NodePort Service的示例:

```yaml
apiVersion: v1
kind: Service
metadata:
name: sample-app-service
spec:
selector:
app: sample-app
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30001
```

#### 步骤三:使用NodePort或LoadBalancer方式将Service暴露出去

最后,我们可以通过NodePort方式或LoadBalancer方式将Service暴露出去。使用NodePort方式时,可以通过Node的IP和NodePort来访问Service。使用LoadBalancer方式时,Kubernetes将会自动创建一个云服务提供商的负载均衡器,并将流量路由到Service。

- 使用NodePort方式访问Service:

```bash
kubectl get nodes -o wide
```

找到Node的IP地址,然后使用NodePort来访问Service:

```bash
curl :
```

- 使用LoadBalancer方式访问Service:

```yaml
apiVersion: v1
kind: Service
metadata:
name: sample-app-service
spec:
selector:
app: sample-app
type: LoadBalancer
ports:
- port: 80
targetPort: 80
```

上面代码示例将Service暴露为一个云服务提供商的负载均衡器,可以通过外部IP来访问Service。

### 总结
通过上述步骤,我们可以实现在Kubernetes集群中使用NodePort和LoadBalancer方法来将服务暴露给外部流量。NodePort方式简单易用,适合测试和开发环境;LoadBalancer方式则适合生产环境,可以实现负载均衡和高可用性。希望本文对您理解K8S外部服务访问方法有所帮助!