Kubernetes(简称K8S)是一个开源的容器编排平台,用于自动化容器的部署、扩缩容和管理。在K8S中,Ingress是一种负载均衡器,它可以将外部的HTTP和HTTPS请求转发到Kubernetes集群内部的服务。本文将介绍如何在K8S版本1.9.3下安装和配置Ingress,并附带代码示例。

## 安装K8S和Ingress Controller

安装K8S和Ingress Controller是使用Ingress的前提。下面是安装K8S和Ingress Controller的步骤:

| 步骤 | 操作 |
| ---- | ---- |
| 1 | 安装Kubernetes集群 |
| 2 | 安装Ingress Controller |

### 步骤1:安装Kubernetes集群

在安装K8S之前,首先需要准备好一台或多台Linux服务器,每台服务器上需要安装Docker。

1. 在所有服务器上安装Docker。
```shell
sudo apt-get update
sudo apt-get install docker.io -y
```
2. 在其中一台服务器上作为Master节点,初始化Kubernetes集群。
```shell
sudo kubeadm init --apiserver-advertise-address=
```
3. 在其他节点上加入Kubernetes集群。
```shell
sudo kubeadm join : --token --discovery-token-ca-cert-hash <证书哈希值>
```
4. 在Master节点上设置kubectl命令。
```shell
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```

### 步骤2:安装Ingress Controller

在安装Ingress Controller之前,需要选择适合的Ingress Controller实现。这里选择使用Nginx作为Ingress Controller的实现。

1. 添加Nginx Ingress Controller的helm仓库。
```shell
helm repo add nginx-stable https://helm.nginx.com/stable
```
2. 更新helm仓库。
```shell
helm repo update
```
3. 安装Nginx Ingress Controller。
```shell
helm install my-ingress-controller nginx-stable/nginx-ingress
```

## 配置Ingress资源

安装完Ingress Controller后,可以开始配置Ingress资源。下面是配置Ingress资源的步骤:

| 步骤 | 操作 |
| ---- | ---- |
| 1 | 定义Ingress规则 |
| 2 | 应用Ingress资源 |

### 步骤1:定义Ingress规则

在定义Ingress规则之前,需要确保已经创建好了待访问的服务和服务端口。

1. 创建一个名为`my-ingress.yaml`的文件,并在其中定义Ingress规则。
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: foo-service
port:
number: 80
- path: /bar
pathType: Prefix
backend:
service:
name: bar-service
port:
number: 80
```
2. 将`my-ingress.yaml`文件中的规则应用到Kubernetes集群。
```shell
kubectl apply -f my-ingress.yaml
```

### 步骤2:应用Ingress资源

在应用Ingress资源之前,需要确保已经创建好了待访问的服务和服务端口,并且已经定义了Ingress规则。

1. 创建一个名为`my-service.yaml`的文件,并在其中定义待访问的服务。
```yaml
apiVersion: v1
kind: Service
metadata:
name: foo-service
spec:
selector:
app: foo-app
ports:
- port: 80
targetPort: 8080
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: bar-service
spec:
selector:
app: bar-app
ports:
- port: 80
targetPort: 8080
protocol: TCP
```
2. 将`my-service.yaml`文件中的服务应用到Kubernetes集群。
```shell
kubectl apply -f my-service.yaml
```

2. 检查Ingress资源的状态,确认是否已经成功应用了Ingress规则。
```shell
kubectl get ingress my-ingress
```

## 测试Ingress

在完成Ingress的安装和配置后,可以进行测试以确保Ingress正常工作。下面是测试Ingress的步骤:

1. 修改本地hosts文件,将`example.com`指向Kubernetes集群中任意一台节点的IP地址。
2. 在浏览器中访问`http://example.com/foo`,确认是否能够访问到`foo-service`服务。
3. 在浏览器中访问`http://example.com/bar`,确认是否能够访问到`bar-service`服务。

至此,你已经成功安装配置了K8S版本1.9.3下的Ingress。通过这些步骤,你可以实现使用Ingress进行HTTP和HTTPS请求的转发,将外部请求流量有效地分发到Kubernetes集群中的内部服务中。希望本文对你有所帮助!