创建 httpserver 服务
创建 Service 在集群内访问 httpserver
apiVersion: v1
kind: Service
metadata:
name: httpserver-svc
namespace: mxs
spec:
type: ClusterIP
selector:
app: httpserver
ports:
- protocol: TCP
port: 8088
targetPort: 8080
通过 service 的 cluster ip 访问 httpserver 服务
安装 ingress-nginx
安装 helm
wget https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz
tar -zxvf helm-v3.8.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version
使用 helm 安装 ingress-nginx
helm repo add nginx-stable https://helm.nginx.com/stable
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
使用 yaml 安装 ingress-nginx
如果 helm 安装超时,可以使用 yaml 直接安装
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/cloud/deploy.yaml
安装完 ingress-nginx 之后 EXTERNAL-IP 处于 pending 状态,因为 svc 是 LoadBalancer 类型,需要安装 metallb 进行支持
安装 metallb
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
kubectl apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.56.120-192.168.56.200
EOF
注意 192.168.56.120-192.168.56.200 这个 ip 段要跟集群的 node 在同一个 ip 段内,但是不能包含集群 node 的 ip,否则可能导致集群 node 无法 ping 和 curl 通,我集群 node 的 ip 是 192.168.56.100 和 192.168.56.101 这两个
安装完成后 svc 的 EXTERNAL-IP 就可以了
安装 coredns
下载 deploy.sh 和 coredns.yaml.sed
chmod +x deploy.sh
./deploy.sh > coredns.yaml
kubectl apply -f coredns.yaml
创建 Ingress 使用 http 和 域名访问 httpserver 服务
将以下内容保存为 http-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: http-ingress
namespace: mxs
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: www.mxstest.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: httpserver-svc
port:
number: 8088
创建 ingress
k apply -f http-ingress.yaml
修改 /etc/hosts ,增加一行 " 192.168.56.120 www.mxstest.com "
访问域名
支持 https 访问
生成 https 证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=mxstest.com/O=mxstest" -addext "subjectAltName = DNS:mxstest.com"
创建 secret
kubectl create secret tls mxs-tls --cert=./tls.crt --key=./tls.key
k get secret
把以下文件保存为 https-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: https-ingress
namespace: mxs
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
tls:
- hosts:
- www.mxstest.com
secretName: mxs-tls
rules:
- host: www.mxstest.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: httpserver-svc
port:
number: 8088
创建 https-ingress :
需要先删除 http-ingress,因为域名和路径与 https-ingress 冲突了
k delete ingress http-ingress
k apply -f https-ingress.yaml
用 https 访问 httpserver
curl -v -k https://www.mxstest.com