我在 Azure 虚拟机上安装了 MicroK8s 并添加了次要 IP 到网络接口,尝试从外部访问

背景和目标

如果想要验证在Kubernetes上运行的一些中间件,但又不至于需要单独准备AKS时,有时候可以在Azure VM上准备Ubuntu并运行MicroK8s。例如,为了验证Nginx的Pod和LoadBalancer,我用Azure CLI在NIC中添加了次要IP,从而能够从外部访问LoadBalancer。

创建一个用于验证的虚拟机。

# 環境変数をセットします
region=japaneast
prefix=mnrk8s

# リソースグループを作成します
az group create \
  --name ${prefix}-rg \
  --location $region

# 仮想マシンにログインするための SSH キーを作成します
ssh-keygen -m PEM -t rsa -b 4096 \
  -f ${prefix}

# 仮想マシンを作成します
az vm create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --os-disk-name ${prefix}-vmOSDisk \
  --image Canonical:0001-com-ubuntu-server-focal:20_04-lts:latest \
  --admin-username azureuser \
  --ssh-key-value ${prefix}.pub \
  --size Standard_B2s \
  --nsg-rule NONE \
  --storage-sku Standard_LRS \
  --public-ip-address-dns-name ${prefix}

# 自分の IP から SSH アクセスできるようにします
az network nsg rule create \
  --resource-group ${prefix}-rg \
  --name Allow-SSH \
  --nsg-name ${prefix}-vmNSG \
  --priority 100 \
  --source-address-prefixes $(curl -s inet-ip.info) \
  --destination-port-ranges 22 \
  --access Allow \
  --protocol Tcp

# SSH 接続します
ssh -i ${prefix} azureuser@${prefix}.japaneast.cloudapp.azure.com

安装和验证 MicroK8s

# MicroK8s をインストールします
sudo snap install microk8s --classic

# microk8s グループに azureuser を追加します
sudo usermod -a -G microk8s $USER

# microk8s グループにログインします
newgrp microk8s

# microk8s のステータスを確認します
microk8s status --wait-ready

# node のステータスが Ready なのを確認します
microk8s kubectl get nodes

# k8s 上のリソースを確認します
microk8s kubectl get all -A

# kubectl でコマンドを実行できるようエイリアスを設定します
echo "alias kubectl='microk8s kubectl'" >> ~/.bash_aliases

# エイリアスを有効にします
source ~/.bashrc

# k8s のバージョンを確認します
kubectl version --short

# Pod 内から名前解決できるようにします
microk8s enable dns

# nginx の Pod を立ててみます
kubectl run nginx --image=nginx

# Pod のステータスが Running になるまで待ちます(Ctrl+C で終了)
kubectl get pod -w

# Pod 内にある curl コマンドで名前解決できるか確認します
kubectl exec -it nginx -- curl inet-ip.info

# Pod を削除します
kubectl delete pod nginx

准备一个用于验证的Pod。

# microk8s の MetalLB を使用して LoadBalancer にプライベート IP を付与できるようにします
microk8s enable metallb:10.0.0.50-10.0.0.59

# LoadBalancer 込みの Nginx マニフェストを作成します
cat << EOF > nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - name: nginx
    port: 80
  selector:
    app: nginx
  type: LoadBalancer
EOF

# Nginx マニフェストをデプロイします
kubectl apply -f nginx.yaml

# Pod と LoadBalancer の状態を確認します
kubectl get pod,svc

# Nginx のコンテンツが取得できるか確認します
curl 10.0.0.50

# newgrp から抜けます
exit

# 仮想マシンから抜けます
exit

为虚拟机的网络接口添加次要IP。

# パブリック IP を作成します
az network public-ip create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vmPublicIP2 \
  --sku Basic \
  --dns-name ${prefix}-nginx

# NIC にセカンダリ IP を追加します
az network nic ip-config create \
  --resource-group ${prefix}-rg \
  --name ipconfig${prefix}-vm2 \
  --nic-name ${prefix}-vmVMNic \
  --private-ip-address 10.0.0.50 \
  --vnet-name ${prefix}-vmVNET \
  --subnet ${prefix}-vmSubnet \
  --public-ip-address ${prefix}-vmPublicIP2

# 自分の IP から HTTP アクセスできるようにします
az network nsg rule create \
  --resource-group ${prefix}-rg \
  --name Allow-HTTP \
  --nsg-name ${prefix}-vmNSG \
  --priority 200 \
  --source-address-prefixes $(curl -s inet-ip.info) \
  --destination-port-ranges 80 \
  --access Allow \
  --protocol Tcp

# Nginx のコンテンツが取得できるか確認します
curl ${prefix}-nginx.japaneast.cloudapp.azure.com
microk8s-vm.png

删除验证环境

# リソースグループを削除します
az group delete \
  --name ${prefix}-rg \
  --yes

# SSH キーを削除します
rm -f ${prefix}*

请你以此为参考

 

广告
将在 10 秒后关闭
bannerAds